流程控制语句
流程结构一共有三种,顺序结构,选择结构,循环结构。任何问题都能使用这三种结构来解决。
顺序结构
就是从上往下依次执行
选择结构
- 1.if 语句
if语句有三种形式
1.if(条件表达式){执行体}
当if中的条件为true的时候,执行大括号中的执行体,当if中的条件为false的时候,什么也不执行。
2.if(条件表达式){执行体}else{执行体}
当if中的条件为true时,执行if的执行体,当if中的条件为false时,执行else的执行体
3.if(条件表达式1){执行体1}else if(条件表达式2){执行体2}...else{其他执行体}
在if...else if...else语句中,首先判断条件1是否满足,不满足再判断条件二是否满足……只要有一个条件满足,则后面的条件都不再执行。
所以,多条件判断用 if...else if...else 效率更高
- 2.switch语句
格式:
1 switch(表达式){ 2 case 常量1: 3 要执行的语句; 4 break; 5 case 常量2: 6 要执行的语句; 7 break; 8 case 常量3: 9 要执行的语句; 10 break; 11 …… 12 13 default: 14 要执行的语句; 15 break; 16 }
case 中的常量类型可以是 byte、short、int、char、enum、String
其中enum是JDK5开始支持的,String 是JDK7开始支持
需要注意的问题有:
1.执行顺序与default书写的位置无关,一定是先与case比较,没有符合的case时才走default
1 switch(i){ 2 3 case 1: 4 System.out.println("星期一"); 5 break 6 default: 7 System.out.println("输入错误!请输入数字1-7之间的整数!"); 8 break; 9 case 2: 10 System.out.println("星期二"); 11 break; 12 case 3: 13 System.out.println("星期三"); 14 break; 15 case 4: 16 System.out.println("星期四"); 17 break; 18 case 5: 19 System.out.println("星期五"); 20 break; 21 case 6: 22 System.out.println("星期六"); 23 break; 24 case 7: 25 System.out.println("星期日"); 26 break; 27 28 }
结果:
2 星期二 8 输入错误!请输入数字1-7之间的整数!
2.符合case条件时,才会执行语句
3.break起跳出switch语句的作用,没有break会在符合条件的时候一直向下穿透
此时如果default写在最后,也会执行default里面的语句,如:
1 switch(i){ 2 case 1: 3 System.out.println("星期一"); 4 break; 5 case 2: 6 System.out.println("星期二"); 7 break; 8 case 3: 9 System.out.println("星期三"); 10 break; 11 case 4: 12 System.out.println("星期四"); 13 break; 14 case 5: 15 System.out.println("星期五"); 16 break; 17 case 6: 18 System.out.println("星期六"); 19 //break; 20 case 7: 21 System.out.println("星期日"); 22 //break; 23 default: 24 System.out.println("输入错误!请输入数字1-7之间的整数!"); 25 break; 26 }
请输入数字1-7之间的整数,输入字符退出 6 星期六 星期日 输入错误!请输入数字1-7之间的整数! 程序结束!
default写在上面则不会执行
另,执行体相同的case可以合并
循环结构
1.while(循环条件){循环体}
2.do{循环体}while(循环条件);
do...while 循环的特点是不管条件满不满足,都先执行一次循环体
3.for 循环
死循环的写法
while(true){}
for(;true;){}
for(;;){}
do{}while(true);
注意,while(true){}; //编译会报错,最后的分号会是无法访问的语句
嵌套循环
嵌套循环是指在一个循环结构中嵌套另一个循环结构。while、do…while、for循环语句都可以进行嵌套,并且它们之间也可以互相嵌套。用的最多的是for循环嵌套for循环。
总循环次数等于内循环次数乘以外循环次数。
跳出循环涉及到两个关键字 break 和 continue
break 是终止整个循环,如果是在嵌套的循环中,那么就是跳出离 break 最近的循环
(break 还可作用于switch条件语句中,作用是终止某个case并跳出switch结构)
continue 是终止本次循环,继续执行程序,如果是在嵌套循环中,则跟break一样是就近原则
要想跳出外层循环可以对要跳出的循环使用标记,如:
1 a: for(int i=1;i<=9;i++){ 2 for(int j=1;j<=i;j++){ 3 if(i==4)break a; 4 System.out.print(j+"*"+i+"="+i*j+"\t"); 5 } 6 System.out.println(); 7 }
1 a: for(int i=1;i<=9;i++){ 2 for(int j=1;j<=i;j++){ 3 if(i==4)continue a; 4 System.out.print(j+"*"+i+"="+i*j+"\t"); 5 } 6 System.out.println(); 7 }
==============================================
打印腰为6的等腰直角三角形
分析:
一共要打印6行,所以外层循环次数是6,
而这6行,每一行打印的列数依次为 1 2 3 4 5 6,为递增等差数列 an = a1+(n-1)*d
i: 1 2 3 4 5 6
j:1 2 3 4 5 6
j =i;
1 for(int i=1;i<=6;i++){ 2 for(int j=1;j<=i;j++){ 3 System.out.print("* "); 4 } 5 System.out.println(); 6 }
结果为:
*
* *
* * *
* * * *
* * * * *
* * * * * *
如果要倒着打印即打印出如下结果
* * * * * *
* * * * *
* * * *
* * *
* *
*
分析:
一共要打印6行,所以外层循环次数是6,
而这6行,每一行打印的列数依次为 6 5 4 3 2 1,为递减等差数列 an = a1+(n-1)*d
i: 1 2 3 4 5 6
j:6 5 4 3 2 1
j =6+(i-1)*(-1)=7-i;
所以程序为
1 for(int i=1;i<=6;i++){ 2 for(int j=1;j<=7-i;j++){ 3 System.out.print("* "); 4 } 5 System.out.println(); 6 }
==============================================
打印腰为3的等腰三角形
O
O O O
O O O O O
分析:
便于效果的观察,可以理解为打印出
X X X O
X X O O O
X O O O O O
所以,第一步要打印出
X X X
X X
X
内循环每次打印的个数为 3 2 1,为递减等差数列
an = a1+(n-1)*d
i: 1 2 3
j: 3 2 1
j=3+(i-1)*(-1)=4-i;
代码为
1 for(int i=1;i<=3;i++){ 2 for(int j=1;j<=4-i;j++){ 3 System.out.print("X "); 4 } 5 System.out.println(); 6 }
接下来要打印的是
X X X O
X X O O O
X O O O O O
在第一次打印的基础上,每一行后面又是 O ,个数分别为1 3 5 7 9 等差数列 , j = 2*i - 1;
代码为
1 for(int i=1;i<=3;i++){ 2 for(int j=1;j<=4-i;j++){ 3 System.out.print("X "); 4 } 5 for(int j=1;j<=2*i-1;j++){ 6 System.out.print("O "); 7 } 8 System.out.println(); 9 }
最后将 ‘X’ 替换成空格就可以打印出题目中的等腰三角形了