第6课流程控制的陷阱读书笔记:
1、 switch语句允许的表达式:
()里只能是如下5种数据类型:byte,short,int,char,enum
绝对不能是String,long,float,double等其他基本类型。
package com.trap;
public class SwitchTest {
public static void main(String[] args) {
int a=5;
switch((int)(a+1.2+0.8)){
case 6:System.out.println("6");break;
case 7:System.out.println("7");break;
case 8:System.out.println("8");break;
default:System.out.println("default");
}
}
}
package com.trap;
enum Season
{
SPRING,SUMMER,FALL,WINTER
}
public class EnumSwitch
{
public static void main(String[] args)
{
Season s = Season.FALL;
switch (s)
{
case SPRING://不可加Seanson.SPRING限定
System.out.println("春天不是读书天");
break;
case SUMMER:
System.out.println("夏日炎炎正好眠");
break;
case FALL:
System.out.println("秋多蚊蝇");
break;
case WINTER:
System.out.println("冬日冷");
break;
}
}
}
2、 if语句中的else的隐含条件:就是不满足else之前的条件
3、 尽量不省略循环体的花括号
Java语言规定,for,while,do循环中重复执行的语句不能是一条单独的局部变量定义语句。
4、 For循环
1、小心for();….
2、掌握循环执行次数要看整个循环过程(过程中改变)
3、浮点数作循环计数器
情况1:无限循环
package com.trap;
public class FloatCount
{
public static void main(String[] args)
{
final int START = 999999999;
//尝试循环50次,结果无限循环,因为i的值一直是:1.0E9 而START+50 是1.000006E9
for (float i = START ; i < START + 50 ; i ++)
{
System.out.println("i的值:" + i + new java.util.Date());
}
}
}
原因:
package com.trap;
public class FloatTest
{
public static void main(String[] args)
{
final float f1 = 999999999;
System.out.println(f1);
System.out.println(f1 + 1);
System.out.println(f1 == f1 + 1); //true
}
}
情况2:不执行
package com.trap;
public class FloatCount2
{
public static void main(String[] args)
{
final int START = 999999999;
//尝试循环20次
for (float i = START ; i < START + 20 ; i ++)
{
System.out.println("i的值:" + i + new java.util.Date());
}
}
}
原因:
package com.trap;
public class FloatTest2
{
public static void main(String[] args)
{
final float f1 = 999999999;
System.out.println(f1);
System.out.println(f1 + 20);
//下面语句输出true
System.out.println(f1 == f1 + 20);
System.out.println(f1 + 50);
//下面语句输出false
System.out.println(f1 == f1 + 50);
}
}
4、foreach作循环计数器
循环过程中改变循环变量没有意义,不会改变集合本身