第1题:以下代码哪个是正确的?为什么?
a. byte b = 1 + 1;
b. byte b = 1; b = b + 1;
c. byte b = 1; b = b += 1;
d. byte b = 1; b = ++b;
答:选项a是对的,定义b为byte型,且值为2。
选项b是错的,b+1的结果默认转换为int型,int型不能直接转换为byte型,需强制转换。
应改为:byte b=1;b=(byte)(b+1);
选项c是对的,b+=1包含了一个隐藏的类型转换,相当于 b=(byte)(b+1);
选项d是对的,b=++b也包含了一个隐藏的类型转换。
第2题:创建ArrayList对象,添加5个元素,使用Iterator遍历输出
[java] view plaincopy
<span style="font-size:18px;">import java.util.ArrayList;
import java.util.Iterator;
public class Test2
{
public static void main(String[] args)
{
//创建ArrayList对象
ArrayList<String> al = new ArrayList<String>();
//对al集合添加5个元素
al.add("1");
al.add("2");
al.add("3");
al.add("4");
al.add("5");
//获取迭代器
Iterator<String> it = al.iterator();
//循环迭代器
while(it.hasNext()) //如果有下一个值,进入循环
{
//得到迭代器中下一个值
String el = it.next();
//输出结果
System.out.println(el);
}
public static int[] repeat(int [] arr){
boolean flag[] = new boolean[arr.length];/*定义一个和目标数组长度一样的boolean类型,此数组用作标示,用于获取不重复元素的个数的标志位</span><span style="font-size:18px; font-family: Arial, Helvetica, sans-serif;">*/</span>
[java] view plaincopy
<span style="font-size:18px;">
for (int i = 0; i < flag.length; i++) {/*遍历数组,查找重复的元素。循环结束后,重复的元素对应的标志位置都为true。</span><span style="font-family: Arial, Helvetica, sans-serif;font-size:18px;">*/</span><span style="font-size:18px;">
</span><span style="font-size:18px;">
</span><span style="font-size:18px;font-family: Arial, Helvetica, sans-serif;"> </span><span style="font-size:18px; font-family: Arial, Helvetica, sans-serif;"> if (flag[i]) //如果这个元素对应的标志位已被置为true,则返回循环继续检查下一个元素。</span>
[java] view plaincopy
<span style="font-size:18px;"> continue;
for (int j = i+1; j < flag.length; j++) { //后边元素和此位置上的元素比较,
if (arr[j]==arr[i]) { //如果后边元素和前边元素相同,
flag [j]=true; //则此重复元素对应的标志位置为true
}
}
}
int count=0; //计数器,记录不重复元素的个数
for (int i = 0; i < flag.length; i++) { //算出不重复元素的个数,记为count,
if (!flag[i]) { //标志位依然为false的对应元素即为不重复的元素
count++;
}
}
int index=0;
int [] arrNew = new int [count]; //定义新数组,元素个数为count。
for (int i = 0; i < arr.length; i++) { //将所有不重复的元素存入新数组中
if (!flag[i]) {
arrNew[index++]=arr[i];
}
}