流程控制
一、分支结构
1. if else
有三种情况:
第一种:
if (条件表达式){
执行表达式
}
第二种:
if(条件表达式){
执行表达式1
}else{
执行表达式2
}
第三种
if(条件表达式1){
执行表达式1
} else if(条件表达式2){
执行表达式2
......
}else{
执行表达式n
}
举例代码如下,三种情况:
class IfTest
{
public static void main(String[] args)
{
// 举例一
int heartbeats = 70;
if (heartbeats<60 || heartbeats >100){
System.out.println("需要进一步检查");
}
System.out.println("检查结束");
//举例2
int age = 20;
if (age < 18){
System.out.println("还未成年");
}else{
System.out.println("成年咯");
}
//举例三
if (age<0){
System.out.println("你还没出生呢");
}
else if (age < 18){
System.out.println("青少年时期");
}else if (age < 35){
System.out.println("青壮年时期");
}else if (age < 60){
System.out.println("中年时期");
}else{
System.out.println("老年时期");
}
}
}
2. switch 语句
switch语句是基于一个表达式的值决定要执行的一组语句。
基本语法如下
switch(表达式){
case c1:
语句组1;
break;
case c2:
语句组2;
break;
.....
case ck:
语句组k;
break;
[default:
语句组;
break;]
}
switch语句是意思是:计算表达式的值,用该值依次和c1,c2,…ck比较,如果符合其中之一ci,那么就执行语句组i,如果没有的话就执行default
说明:
- switch中的表达式的值,可以是整型、枚举型或者String类的对象。
- 整型表达式必须是int兼容的对象,即byte short char 和int。
- switch语句中各case分支既可以是单条语句,也可以是由多条语句组成的语句组,不用{}括起来
- default子句是可选的,并且最后一个break语句可以省略
- 不论执行哪个分支,该顺序流都会顺序执行下去,直到break
- switch结构的功能可以用if else if 来实现,但有时候switch结构更简单,可读性强,但会有限制,如数据类型上受到了限制,如果是double型,那就不能使用switch
switch举例–输出一个日期所包含月份的天数
class switchTest
{
public static void main(String[] args)
{
int month = 2;
int year = 2000;
int numDays = 0;
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
numDays = 31;
break;
case 4:
case 6:
case 9:
case 11:
numDays = 30;
break;
case 2:
if (((year % 4 == 0) && !(year % 100 == 0)) || (year % 400 == 0))
{
numDays = 29;
}
else
numDays = 28;
break;
}
System.out.println("The date is 2002.2. The number of Days =" + numDays);
}
}
switch 语句的扩展
我们上面介绍,传统的switch语句存在一些不方便之处,如果一个case分支执行后没有遇到break,会继续执行之后的case分支,直到遇到break。在Java SE 12 和 Java SE 13中,对switch进行扩展
箭头case可以带有一个switch 表达式产生值的语句。“case … ->”分支定义如下:
case label1,label2,....,labeln -> expression;(或者 throw-statement 或 block)
我们可以看到,允许在一个case分支里出现以逗号分隔的多个常量值,程序运行时,这些值任何一个匹配成功,箭头右侧的代码就会被执行,并且在这些代码结束后,将不会允许switch表达式或语句中其他任何分支的代码。
还有一个是用yield someValue 其中someValue 是yield 在case分支产生的switch表达式的值。
Break 和 yield 语句使得switch语句和switch表达式易于区分,yield语句用于switch表达式,而break用于switch语句。传统的冒号case可以使用yield 语句构造switch表达式。例如
int result = switch(s){
case 'FOO':
yield 1;
case 'BAR':
yield 2;
default :
yield 0;
}
二、循环语句
1.while和do while
while 语句使一个语句块在某种条件为真时循环执行。该语句的语法如下:
while(逻辑表达式){
语句或语句块
}
其中while语句中的表达式必须是逻辑型的。在该语句执行时,首先求表达式的值,如果等于true,则执行while语句块中的语句。直到while表达式的值变为false
do while 语句语法如下:
do{
语句或语句块
} while(逻辑表达式);
do while 在执行的时候,是先执行循环体中的语句,再求表达式的值,直到表达式的值变为false。do while 是在循坏体的底部求表达式的值,所以,do while 语句至少要把循环体中的语句执行一遍。
2.for 语句
for 循坏执行的次数是可以在执行前确定的,for 语句的语法格式是:
for(初始语句; 逻辑表达式 ; 迭代语句){
语句或语句块
}
for 语句执行时先执行初始语句,判断逻辑表达式的值,当逻辑表达式为true时,执行循环体语句,接着执行迭代语句,然后再去判断逻辑表达式的值。这个过程一直走下去,直到逻辑表达式的值为false。
- 可以在for循环的初始化部分声明一个变量,它的作用域为整个for循环
- for 循环通常用于循环次数确定的情况,但也可以根据循环结束条件完成循环次数不确定的情况
- 在初始化部分和迭代部分可以使用逗号来进行多个操作
- 初始化,终止以及迭代部分都可以为空语句,但分号不能省略,逻辑表达式为空时,默认表达式为恒真
如
for(i = 0,j = 10;i < j; i++,j--){
...
}
for循环经常用于数组各个元素或一个字符串中各个字符的处理,例:用for语句输出一个数组的元素
class forTest
{
public static void main(String[] args)
{
int[] array = {32, 87, 3, 589, 12, 1076, 2000};
for (int i = 0;i < array.length ;i++ ){
System.out.print(array[i]+" ");
}
System.out.println();
}
}
3.跳转语句
Java中可以用break 和 continue 两个循坏跳转语句进一步控制循环。这两个语句的一般格式
break[label];
continue[label];
这两个语句都可以带标签(label)使用,也可以不带标签使用。标签是出现在一个语句之前的标识符,标签后面要跟上一个:
label : statement
1.break
不带标签的break就是可以用来终止最内层的循坏体。带了标签的break语句将结束标签所指示的循坏的执行
例子: 在二维数组中搜索指定的值
class breakTest
{
public static void main(String[] args)
{
int[][] array = {{32, 87, 3, 589},{12, 1076, 2000, 8},{622, 127, 77, 955}};
int i = 0;
int j = 0;
int searchfor = 12;
boolean foundIt = false;
search:
for (i = 0;i < array.length ;i++ ){
for (j = 0;j < array[i].length ;j++ ){
if (array[i][j] == searchfor){
foundIt = true;
break search;
}
}
}
if (foundIt){
System.out.println("Found" + searchfor + "at" + i + "," + j);
}
else{
System.out.println("找不到" + searchfor);
}
}
}
2.continue
在循环中,continue 语句跳过当前循环的其余语句,执行下一次循环,当然执行下一次循环要判定循环条件是否满足,不带标签的continue是跳过最内层的循坏,并开始执行最内层循环的下一次循环