分支结构
Java提供了两种常见的分支控制结构:if语句和switch语句。
if语句
if语句使用布尔值或布尔表达式(表达式结果为布尔值),if语句有3中形式:
第一种形式:
if (5 > 3) { System.out.println("5 > 3"); }
第二种形式:
if (5 > 3) { System.out.println("5 > 3"); } else{ System.out.println("5 < 3"); }
第三种形式:
if (5 > 3) { System.out.println("5 > 3"); } else if(5 > 4){ System.out.println("5 > 4"); } else{ System.out.println("5 < 3 and 5 < 4"); }
我们看下面一个例子:
int age = 45; if (age <= 20) { System.out.println("年轻人"); } else if(age > 20 && age < 40){ System.out.println("青年人"); } else if(age >= 40 && age < 60){ System.out.println("中年人"); } else{ System.out.println("老年人"); }
这个是if语句的应用,结果当然是青年人,没有问题。
但是,如果分支非常多的话,这样写就很麻烦,所以就出现了下面的switch语句。
switch语句
switch语句由一个控制表达式和多个case标签组成。switch语句后面的控制表达式的数据类型可以是:byte、short、char、int四种基本类型,枚举类型和java.lang.String类型(从java7才允许)。总共6种。
例子:
String season = "夏天"; switch (season) { case "春天": System.out.println("春雨沥沥"); break; case "夏天": System.out.println("夏日炎炎"); break; case "秋天": System.out.println("秋风瑟瑟"); break; case "冬天": System.out.println("东雪皑皑"); break; default: System.out.println("四季不分"); break; }
注意:每一个case语句后面都要有一个break,当控制表达式的值不等于任何一个case后面的值时,会进入default分支。
当然,也有一些情况case后面时不需要break的。看下面的例子:
char score = 'B'; switch (score) { case 'A': case 'B': System.out.println("及格"); break; case 'C': case 'D': System.out.println("不及格"); break; default: System.out.println("成绩输入错误"); break; }
当score是A或B时,都是及格,当是C或D时,都是不及格。
循环结构
while语句
结构如下:
while (expression) { statement; }
其中,expression的结果必须是布尔值。while循环每次执行循环体(statement)之前,都要对expression求值,若值为true,才会进入循环体,否则while循环结束。
例子:
int count = 0; while (count <= 10) { System.out.println(count); count++; } System.out.println("count已结大于10了,现在为11");
程序打印11次count后,执行最后一句。
do while循环
do while循环和while循环的区别在于:while循环线判断循环条件,如果条件为真才执行循环体。do while循环是先执行循环体,再判断循环条件,如果循环体为真,则再执行循环体,如此往复。
结构如下:
do { statement; } while (condition);
将上面的例子重写:
int count = 0; do { System.out.println(count); count++; } while (count <= 10); System.out.println("count已结大于10了,现在为11");
for语句
结构如下:
for(语句1;语句2;语句3){ 循环体 }
其执行顺序:
- 先执行语句1,并且只执行一次
- 执行语句2,语句2 是条件控制语句,结果为布尔值,若为false,循环结束,不会执行语句3和循环体了。
- 若语句2的结果为true,则执行循环体
- 执行循环体后,会执行语句3
- 再执行语句2,如此往复,重复2345
例子:
int c = 0; for (int i = 0; i < 10; i++,c++) { System.out.println("执行循环体"); //打印了10次 } System.out.println(c); //10
如下语句是合法的,只不过是死循环:
for(;;){ System.out.println("我是死循环"); }
也就是说语句1、语句2、语句3不是必须的,这个可以根据情况而定。
控制循环语句
break语句
break语句作用是跳出当前循环,如下:
int c = 0; for(;;c++){ if(c > 10){ break; } System.out.println("我不是死循环"); }
本来for语句构成了死循环,但是现在加了break,就不是死循环了,当c>10 时,就会执行break,跳出for循环。
break 可以用在任何循环语句中,也会用在switch语句中。
continue语句
continue语句不会跳出当前循环,只是忽略本次循环。
例子:
int c = 0; while(c < 10){ c++; if(c == 5){ continue; } System.out.println("执行循环体"); }
本来回打印10次”执行循环体“,但是当c等于5时,忽略了本次循环,下面的语句都不会执行了,直接进行下次循环,所以少打印了一次,最后只打印了9次。