流程控制
概述
执行结构
1996 年,计算机科学家 Bohm 和 Jacopini 证明了:任何简单或复杂的算法都可以由顺序结构、分支结构和循环结构这三种基本结构组合而成。 它们的共同点是都包含一个入口和一个出口,它们的每个代码都有机会被执行,不会出现死循环。
-
顺序结构
顺序结构是一种基本的控制结构,它按照语句出现的顺序执行操作。
-
分支结构
分支结构又被称为选择结构,根据条件成立与否来执行操作。
-
循环结构
循环结构是一种重复结构,如果条件成立,它会重复执行某一循环体,直到出现不满足的条件为止。
分支结构
if
if(条件语句){…}
// ---------------------------------------
if (条件语句){…
}else{
…
}
// ---------------------------------------
if (条件语句){
…
}else if(条件语句){
…
}
// ---------------------------------------
if (条件语句){
…
}else if(条件语句){
…
}else{
…
}
switch
switch(表达式){
case 取值 1: 语句块 1;break;
case 取值 n: 语句块 n;break;
default: 语句块 n+1;break; // 可选
}
/* 注意:
1. 表达式的返回值必须是下述几种类型之一:int, byte, char, short,String
2. case 子句中的取值必须是常量,且所有 case 子句中的取值应是不同的;
3. default 子句是可选的;
4. break 语句用来在执行完一个 case 分支后使程序跳出 switch 语句块;
5. 如果 case 后面没有写 break 则直接往下面执行!
6. Case 后面的执行体可写{ }也可以不写{ }
*/
// 示例:5. 如果 case 后面没有写 break 则直接往下面执行!
package study.basic.day02;
import java.util.Scanner;
public class Demo03 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str1 = sc.nextLine();
switch (str1) {
case "1":
case "2":
case "3":
System.out.println("春天");
break;
case "4":
case "5":
case "6":
System.out.println("夏天");
break;
default:
System.out.println("输入不合法");
break;
}
}
}
循环结构
while
while(条件表达式){
//语句块;
}
do while
do{
//语句块;
}while(条件表达式);
for
for(初始化参数; 判断条件; 更新循环变量){
循环体;
}
/* 注意:
执行顺序:初始化参数-> 进行条件判断 -> 执行循环体 -> 更新循环变量(先执行循环体 再 执行变量更新)
*/
/* 如果 判断条件 没写,默认为true 示例 如下:
for(int i=0;;i++) {
System.out.println(i);
if(i>=3)break;
}
执行结果:0 1 2 3
*/
// 示例
package study.basic.day02;
public class Demo_for_01 {
public static void main(String[] args) {
printGraph1();
System.out.println();
printGraph2();
System.out.println();
printGraph3();
System.out.println();
}
/**打印三角形
* *
* ***
* *****
* *******
* i,行数:4
* j,列数:7,第0行循环打印1次*,第1行循环3次,第2行循环5次,第3行循环7次
*
* 观察得出分析结果:
* 每行*星号数=2*i+1
* */
public static void printGraph1() {
for(int i=0;i<4;i++) {
for(int j=0;j<2*i+1;j++) {
System.out.print("*");
}
System.out.println();
}
}
/**打印三角形(下面图形中的-表示空格)
* ---*
* --***
* -*****
* *******
* i,行数:4
* 空格,第0行循环打印3次空格,第1行循环2次,第2行循环1次,第3行循环0次
* *, 第0行循环打印1次*,第1行循环3次,第2行循环5次,第3行循环7次
* 观察得出分析结果:
* 每行空格数=3-i
* 每行*星号数=2*i+1
* */
public static void printGraph2() {
for(int i=0;i<4;i++) {
for(int j=0;j<3-i;j++) {
System.out.print(" ");
}
for(int j=0;j<2*i+1;j++) {
System.out.print("*");
}
System.out.println();
}
}
/**打印菱形(下面图形中的-表示空格)
* ---*
* --***
* -*****
* *******
* -*****
* --***
* ---*
* i,行数:7
* 空格,第0行循环打印3次空格,第1行循环2次,第2行循环1次,第3行循环0次
* 空格,第4行循环打印1次空格,第5行循环2次,第6行循环3次
* *, 第0行循环打印1次*,第1行循环3次,第2行循环5次,第3行循环7次
* *, 第4行循环打印5次*,第5行循环3次,第6行循环1次
* 观察得出分析结果:
* 如果i<4,每行空格数=3-i; 如果i>=4,每行空格数=i-3
* 如果i<4,每行*星号数=2*i+1; 如果i>=4,每行*星号数=2*(6-i)+1
* */
public static void printGraph3() {
for(int i=0;i<7;i++) {
if(i<4) {
for(int j=0;j<3-i;j++) {
System.out.print(" ");
}
for(int j=0;j<2*i+1;j++) {
System.out.print("*");
}
}else {
for(int j=0;j<i-3;j++) {
System.out.print(" ");
}
for(int j=0;j<2*(6-i)+1;j++) {
System.out.print("*");
}
}
System.out.println();
}
}
}
退出多重循环
// 多重循环时,break只跳出当前子循环
for(int i=0; i<4; i++) {
for(int j=0; j<4; j++) {
if(j == 3)break;
System.out.println("i="+i+", j="+j);
}
}
// 解决方法:给循环加名称
haha:for(int i=0; i<4; i++) {
for(int j=0; j<4; j++) {
if(j == 3)break haha;
System.out.println("i="+i+", j="+j);
}
}