3.控制结构

3.控制结构

3.1顺序控制

介绍:程序从上到下逐行执行,中间没有任何判断和跳转。是程序默认的控制顺序。

例如Java中定义成员变量应采用合法的前向引用:

public class Test{
    //正确形式
    int num1 = 12;
    int num2 = num1 + 1;
    //错误形式
    int num4 = num3 + 2;
    int num3 = 8;     
}

3.2分支控制

3.2.1if-else 分支结构

让程序有选择的的执行,分支控制有三种

  1. 单分支 if
  2. 双分支 if-else
  3. 多分支 if-else if -…-else

单分支 if

image-20220220150732115

image-20220220150831745

双分支 if-else

image-20220220150919972

image-20220220150946150

多分支 if-else if -…-else

image-20220220151054921

多分支流程图:

image-20220220151152892

/*
输入保国同志的芝麻信用分: 要求:
	信用分为 100 分时,输出 信用极好;信用分为(80,99]时,输出 信用优秀;
	信用分为[60,80]时,输出 信用一般;其它情况 ,输出 信用 不及格
	请从键盘输入保国的芝麻信用分,并加以判断
*/
import java.util.Scanner; 
public class IF03 {
	public static void main(String[] args) {
		Scanner myScanner = new Scanner(System.in);
        //接收用户输入
        System.out.println("请输入信用分(1-100):");
        //请思考:如果输入的不是整数,而是 hello..
        //这里我们后面可以使用异常处理机制搞定
        int grade = myScanner.nextInt();
        //先对输入的信用分,进行一个范围的有效判断 1-100, 否则提示输入错误
        if(grade >=1 && grade <= 100) {
        //因为有 4 种情况,所以使用多分支
            if(grade == 100) { 
                System.out.println("信用极好");
            } else if (grade > 80 && grade <= 99) { 
                //信用分为(80,99]时,输出 信用优秀;
            	System.out.println("信用优秀");
            } else if (grade >= 60 && grade <= 80){
                //信用分为[60,80]时,输出 信用一般
           		System.out.println("信用一般");
            } else {//其它情况 ,输出 信用 不及格
            	System.out.println("信用不及格");
        	}
		} else {
			System.out.println("信用分需要在 1-100,请重新输入:)");
		}
	}
}

嵌套分支

在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支外面的分支结构称为外层分支。建议: 不要超过 3 层(可读性不好)

image-20220220153342498

3.2.2switch分支结构

基本语法:

image-20220220153547960

流程图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yPRJZKVS-1650374906330)(C:\Users\ZHANG\AppData\Roaming\Typora\typora-user-images\image-20220220153739188.png)]

switch注意事项:

image-20220220154020891

3.2.3switch 和 if 的比较

1)如果判断的具体数值不多,而且符合 byte、 short 、int、 char, enum[枚举], String 这 6 种类型。虽然两个语句都可以使用,建议使用 swtich 语句。

2)其他情况:对区间判断,对结果为 boolean 类型判断,使用 if,if 的使用范围更广

3.3循环控制

3.3.1for循环

  • 基本语法:

image-20220224161505437

语法说明:

  1. for 关键字,表示循环控制

  2. for 四要素: (1)循环变量初始化(2)循环条件(3)循环操作(4)循环变量迭代

  3. 循环操作 , 这里可以有多条语句,也就是我们要循环执行的代码

  4. 如果 循环操作(语句) 只有一条语句,可以省略 {}, 建议不要省略

  5. 循环条件是返回一个布尔值的表达式

  6. for(;循环判断条件;) 中的初始化和变量迭代可以写到其它地方,但是两边的分号不能省略。

  7. 循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开。

流程图:

image-20220224161737456

3.3.2while循环和do…while循环

  • while循环基本语法:

image-20220224162208351

流程图:image-20220224162229388

  • do…while循环基本语法:
循环变量初始化; 
do{
​	循环体(语句); 
​	循环变量迭代;
}while(循环条件);//注意后面要有分号

流程图:image-20220224162559129

3.3.3多重循环

介绍:将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for ,while ,do…while 均可以作为外层循环和内层循环。一般使用两层,最多不要超过 3 层, 否则,代码的可读性很差。

实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为 false 时,才会完全跳出内层循环,才可结束外层的当次循环。

/*1)统计 3 个班成绩情况,每个班有 5 名同学,求出各个班的平均分和所有班级的平均分[学生的成绩从键盘输入]。
  2)统计三个班及格人数,每个班有 5 名同学。
*/
/*思路分析:
(1) 先计算一个班5个学生的成绩和平均分,使用 for
    1.1 创建 Scanner 对象然后,接收用户输入
    1.2 得到该班级的平均分,定义一个 doubel sum 把该班级5个学生的成绩累积
(2) 统计 3 个班(每个班 5 个学生) 平均分
(3) 所有班级的平均分
    3.1 定义一个变量,double totalScore 累积所有学生的成绩
    3.2 当多重循环结束后,totalScore / (3 * 5)
(4) 统计三个班及格人数
    4.1 定义变量 int passNum = 0;  当有一个学生成绩>=60, passNum++
    4.2 如果 >= 60 passNum++
(5) 优化
*/
import java.util.Scanner;
public class MulForExercise {
    public static void main(String[] args) {
        //创建 Scanner 对象
        Scanner myScanner = new Scanner(System.in); 
        double totalScore = 0; //累积所有学生的成绩int passNum = 0;//累积 及格人数
        int classNum = 3; //班级个数
        int stuNum = 5;//学生个数
        for( int i = 1; i <= classNum; i++) {//i 表示班级
            double sum = 0; //一个班级的总分
            for( int j = 1; j <= stuNum; j++) {//j 表示学生
                System.out.println("请数第"+i+"个班的第"+j+"个学生的成绩"); 
                double score = myScanner.nextDouble();
                //当有一个学生成绩>=60, passNum++ 
                if(score >= 60) {
                    passNum++;
                }
                sum += score; //累积
                System.out.println("成绩为" + score);
            }
            //因为 sum  是 5 个学生的总成绩
            System.out.println("sum=" + sum + "  平均分=" + (sum / stuNum));
            //把 sum 累积到 totalScore 
            totalScore += sum;
        }
        System.out.println("三个班总分="+ totalScore+ " 平均分=" + totalScore / (classNum*stuNum)); 
        System.out.println("及格人数=" + passNum);
    }
}

3.4跳转控制语句

3.4.1break

break 语句用于终止某个语句块的执行,一般使用在 switch 或者循环[for , while , do-while]中。

image-20220224165312556

注意事项和细节:

image-20220224165452965

/*实现登录验证,
有 3 次机会,如果用户名为"丁三" ,密码"666"提示登录成功,否则提示还有几次机会
*/
import java.util.Scanner;
public class BreakExercise02 {
    //编写一个 main 方法
    public static void main(String[] args) {
    // 思路分析
    // 1.  创建 Scanner 对象接收用户输入
    // 2.  定义 String name ; String passwd;  保存用户名和密码
    // 3. 最多循环 3 次[登录 3 次],如果 满足条件就提前退出
    // 4.  定义一般变量 int chance 记录还有几次登录机会
        Scanner myScanner	= new Scanner(System.in);
        String name = "";
        String passwd = "";
        int chance = 3; //登录一次 ,就减少一次
        for( int i = 1; i <= 3; i++) {//3 次登录机会
            System.out.println("请输入名字"); 
            name = myScanner.next(); 
            System.out.println("请输入密码"); 
            passwd = myScanner.next();
            //比较输入的名字和密码是否正确
            //补充说明字符串 的内容 比较 使用的 方法 equals 
            if("丁三".equals(name) && "666".equals(passwd)) {
                System.out.println("恭喜你,登录成功~"); 
                break;
            }
            //登录的机会就减少一次
            chance--;
            System.out.println("你还有" + chance + "次登录机会");
        }
    }
}    

3.4.2continue

  1. continue 语句用于结束本次循环,继续执行下一次循环。
  2. continue 语句出现在多层嵌套的循环语句体中

3.4.3return

break;
}
//登录的机会就减少一次
chance–;
System.out.println(“你还有” + chance + “次登录机会”);
}
}
}


### 3.4.2continue

1)	continue 语句用于结束本次循环,继续执行下一次循环。
2)	continue 语句出现在多层嵌套的循环语句体中

### 3.4.3return

return 使用在方法,表示跳出所在的方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值