布尔类型
boolean类型只有true和false两种值。
if中的条件必须是布尔型
if(1):错误的
if(布尔类型的){
语句祖;
}:正确
在System.out.println( (布尔语句));
可以输出一个布尔值。
布尔类型不可以强制转换:因为布尔类型与其他基本类型数据不可以互相转换
例如
boolean b = true;
int i = (int)b;
System.out.println(i);
int i = 3;
boolean b = (boolean)i;
System.out.println(b);
错误的
可以用条件运算符
int a=(b==true)?1:0;
//如果b为true则给a赋值1,如果为false则赋值0。
if嵌套类型
if(score >= 90.0)
System.out.print();
else
if()
system,out,print();
else
if()
sys;
else
等价于
if(score >= 90.0)
System.out.print();
else if()
System.out.print();
else if()
System.out.print();
else
System.out.print();
第一个代码和第二个代码的等价的。事实上,第二种是推荐使用的多重选择if语句的书写风格。这种风格称为多分支if-else语句,可以避免深度缩进,并使程序易于阅读。
常见错误类型
1.忘记必要的括号
一个if语句只能控制一个语句,如果多个语句需要花括号。
2.在if行出现错误的分号
比如if();等价于if(){ };
这种错误既不是编译错误,也不是运行错误,而是逻辑错误。
3.对布尔值的冗余测试
if(even = true)
System.out.println("");
if(even)
System.out.println("");
第二个代码的比较好,直接测试布尔变量。这么做的的另一个原因是避免出现难以发现的错误。
4.悬空else出现歧义
if()
if()
System.out.print();
else
System.out.print();
等价于
if()
if()
System.out.print();
else
System.out.print();
也就是说两个代码中,第一个if为假的时候,就没有输出值。当第一个if为真,第二个为假,就执行else。
所以else只和最近的if匹配
还可以强制else
与第一个匹配
if(){
if()
{};
}
else
{};
这样就是强制else与第一个匹配
5.两个浮点数值的相等测试
由于浮点数具有有限的计算精度,无法精准的存储。所以设计浮点数的计算可能引入取整错误。
double x = 1.0 - 0.1 - 0.1 - 0.1 - 0.1 - 0.1;
System.out.println(x == 0.5);
这里x的值可能不是准确的0.5,而是0.5000000001;
这会输出false。
但是
避免重复的代码
if(a){
b = 1000;
System.out.print(b);
}
else {
b = 2;
System.out,print(b);
}
在上面的代码中System.out,print(b);反复出现,可以改成如下
if(a){
b = 1000;
}
else {
b = 2;
}
System.out.print(b)