Java控制结构

发布于:2024-04-28 ⋅ 阅读:(30) ⋅ 点赞:(0)

控制结构

1. 分支控制if-else

介绍:
让程序有选择的的执行,分支控制有三种:
1) 单分支 if         2) 双分支 if-else         3) 多分支 if-elseif-....-else

 //单分支
//使用 if 判断,输出对应信息
if(i >= 90) {
 System.out.println("你成绩为优秀");
 }
 System.out.println("程序继续...");

//双分支
if(i >= 90 ) {
 System.out.println("你成绩为优秀");
 } else {//双分支
System.out.println("继续努力");
 }
 System.out.println("程序继续...");

// 多分支
Scanner myScanner = new Scanner(System.in);
 //接收用户输入
System.out.println("请输入信用分(1-100):");
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,请重新输入:)");
 

2. switch 分支结构

2.1 基本语法

1.  switch关键字,表示swtich分支
2. 表达式对应一个值
3. case常量1:当表达式的值等于常量1,就执行语句块1
4. break :表示退出swtich
5. 如果和case常量1匹配,就执行语句块1,如果没有匹配,就继续匹配 case常量2
6. 如果一个都没有匹配上,执行default
 

 /*
案例:Switch01.java
请编写一个程序,该程序可以接收一个字符,比如:a,b,c,d,e,f,g
 a 表示星期一,b表示星期二 …
根据用户的输入显示相应的信息.要求使用 switch 语句完成
思路分析
1. 接收一个字符 , 创建Scanner对象
2. 使用switch 来完成匹配,并输出对应信息
代码
*/
 Scanner myScanner = new Scanner(System.in);
 System.out.println("请输入一个字符(a-g)");
 char c1 = myScanner.next().charAt(0);//
 //在 java 中,只要是有值返回,就是一个表达式
switch(c1) {
 case 'a' :
System.out.println("今天星期一,猴子穿新衣");
 break;
 case'b' :
 System.out.println("今天星期二,猴子当小二");
 break;
 case'c' :
 System.out.println("今天星期三,猴子爬雪山..");
 break;
 //.....
 default:
 System.out.println("你输入的字符不正确,没有匹配的");
 }
 System.out.println("退出了switch,继续执行程序");

2.2 switch注意事项

1. 表达式数据类型,应和case后的常量类型一致,或者是可以自动转成可以相互比较的类型,比如输入的是字符,而常量是int
2. switch(表达式)中表达式的返回值必须是:(byte,short,int,char,enum[枚举],String)
3. case子句中的值必须是常量,而不能是变量
4. default子句是可选的,当没有匹配的case时,执行default
5. break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有写break,程序会顺序执行到switch结尾,除非遇到break;

2.3 switch和if的比较

1) 如果判断的具体数值不多,而且符合byte、short、int、char,enum[枚举],String这6种类型。虽然两个语句都可 以使用,建议使用swtich语句。
2) 其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广

3. for循环控制(!!!)

3.1 基本语法:

        for  (循环变量初始化; 循环条件; 循环变量迭代){
                 循环操作(可以多条语句);
        }

1. for 关键字,表示循环控制
2. for 有四要素:(1)循环变量初始化(2)循环条件(3)循环操作(4)循环变量迭代
3. 循环操作 , 这里可以有多条语句,也就是我们要循环执行的代码
4. 如果 循环操作(语句) 只有一条语句,可以省略 {}, 建议不要省略

 //打印1~100之间所有是9的倍数的整数,统计个数及总和
//(1) 完成 输出 1-100的值
//(2) 在输出的过程中,进行过滤,只输出9的倍数 i%9==0
 //(3) 统计个数 定义一个变量 intcount=0; 当 条件满足时 count++;
 //(4) 总和 , 定义一个变量 intsum=0; 当条件满足时累积 sum+=i;
//(1) 为了适应更好的需求,把范围的开始的值和结束的值,做出变量
//(2) 还可以更进一步 9 倍数也做成变量 intt=9
 int count = 0; //统计 9 的倍数个数 变量
int sum = 0; //总和
int start = 10;
 int end = 200;
 int t = 5; // 倍数
for(int i = start; i <= end; i++) {
 if( i % t == 0) {
 System.out.println("i=" + i);
 count++;
 sum += i;//累积
}
 }
 System.out.println("count=" + count);
 System.out.println("sum=" + sum)

4. while循环控制

4.1 基本语法

        循环变量初始;
                while (循环条件) {
                        循环体(语句);
                        循环变量迭代;
                }
1) while循环也有四要素
2) 只是四要素放的位置和for不一样.
 

//输出10句 你好
int i = 1; //循环变量初始化
while( i <= 10 ) {//循环条件
System.out.println("你好" + i);//执行语句
i++;//循环变量迭代
}
 System.out.println("退出 while ,继续.." + i); // 11

4.2 注意事项

1) 循环条件是返回一个布尔值的表达式
2)  while循环是先判断再执行语

5. do..while循环控制

5.1 基本语法

                循环变量初始化;
                do {
                        循环体(语句);
                        循环变量迭代;
                 } while  (循环条件);

1. do while 是关键字 1. 也有循环四要素, 只是位置不一样
2. 先执行,再判断,也就是说,一定会至少执行一次
3. 最后 有一个 分号 ;

5.2 注意事项

1) 循环条件是返回一个布尔值的表达式
2) do..while循环是先执行,再判断,因此它至少执行一次

6. 多重循环控制

1)  将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for,while,do…while均可以作为外层循环和内层循环。 【建议一般使用两层,最多不要超过3层, 否则,代码的可读性很差】
2) 实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内 层循环,才可结束外层的当次循环,开始下一次的循环
3) 设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n次。

案例:
1) 统计3个班成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的平均分[学生的成绩从键盘输入]。
2) 统计三个班及格人数,每个班有5名同学。

//(1) 先计算一个班 ,5个学生的成绩和平均分 , 使用for
 //1.1 创建 Scanner 对象然后,接收用户输入
//1.2 得到该班级的平均分 , 定义一个 doubelsum 把该班级5个学生的成绩累积
//(2) 统计 3 个班(每个班5个学生) 平均分
//(3) 所有班级的平均分
//3.1 定义一个变量,doubletotalScore 累积所有学生的成绩
//3.2 当多重循环结束后,totalScore /(3*5)
 //(4) 统计三个班及格人数
//4.1 定义变量 intpassNum =0; 当有一个学生成绩>=60,passNum++
 //4.2 如果 >=60passNum++
 //(5) 可以优化[效率,可读性, 结构]
 //创建 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);

7. 跳转控制语句-break

7.1 基本介绍

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

7.2 注意事项

(1) break 语句可以指定退出哪层
(2) label1是标签,名字由程序员指定。
(3) break后指定到哪个label 就退出到哪里
(4) 在实际的开发中,老韩尽量不要使用标签。
(5) 如果没有指定break,默认退出最近的循环体

8.跳转控制语句-continue

8.1 基本介绍

1) continue语句用于结束本次循环,继续执行下一次循环。
2) continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环,这个和前面的标签的 使用的规则一样.

9. 跳转控制语句-return

return使用在方法,表示跳出所在的方法。注意:如果 return 写在 main方法,退出程序


网站公告

今日签到

点亮在社区的每一天
去签到