1. 关于自动提升类型的易错题
public static void main(String[] args) {
char x = 'x';
int i = 10;
System.out.println(true? x : i);
System.out.println(true? 'x' : 10);
}
//答案:
//120
//x
/*
* 如果其中有一个是变量,按照自动类型转换规则处理成一致的类型;
* 如果都是常量,如果一个是char,如果另一个是[0~65535]之间的整数按char处理,相当于(char)10;
* 如果一个是char,另一个是其他,按照自动类型转换规则处理成一致的类型;
*/
2. 如何求一个0~255范围内的整数的十六进制值,例如60的十六进制表示形式3C
Scanner sc = new Scanner(System.in);
int number = sc.nextInt();
int i1 = number / 16;
int i2 = number % 16;
String s1 = (i1 > 9) ? (char)((i1 - 10) + 'A') + "" : i1 + " ";
String s2 = (i2 > 9) ? (char)((i2 - 10) + 'A') + "" : i2 + " ";
System.out.println(number + "的十六进制是" + s1 + s2);
3. 关于自增
int i = 0;
i = i++;
System.out.println(i);
/**
* i++ 表达式返回0 ,i自增i变为1。 所以运算的结果为返回值为0,i=1。再算等号左边赋值,把返回值0赋给i, i又变成了0。
*/
//面试题:陷阱题
//先赋值,把i原来的值重新赋值给i,不变,然后i自增,但是这个自增后的值没有在放回变量i的位置
4. 考察运算符的优先级
int x=0,y=1;
if(++x==y-- & x++==1||--y==0)
System.out.println("x="+x+",y="+y);
else
System.out.println("y="+y+",x="+x);
//x = 2,y = 0;
5. 写出运算结果
int i = 0, j = 5;
tp: for (;;){
i++;
for(;;){
if(i > j--)
break tp;
}
}
System.out.println("i = " + i + ", j = "+ j);
//i=1,j=-1;
6. 打印输出以下图案,使用一个外层循环
*
* * *
* * * * *
* * * * * * *
* * * * *
* * *
*
for(int i = 1; i <= 7;i ++) {
if(i <= 4) {
for(int j = 1; j <= 2 * i - 1; j++) {
System.out.print("* ");
}
}else {
for(int j = 1; j <= 15 - 2 * i; j ++) {
System.out.print("* ");
}
}
System.out.println();
}