JAVA学习-02-韩顺平老师
JAVA流程控制详解-含练习题
-
分支控制
- 单分支
/* 基本语法 if (条件表达式) { if语句块 } */ int a = 10; if ( a > 8 ) { System.out.println("进入了if语句块"); }
- 双分支
/* 基本语法 if (条件表达式) { if语句块 } else { else语句块 } */ int a = 10; if ( a > 8 ) { System.out.println("进入了if语句块"); } else { System.out.println("进入了else语句块"); }
- 多分支
/* 基本语法 if (条件表达式) { if语句块 } else if { else if 语句块 } else { else语句块 } */ int a = 10; if ( a > 8 && a <= 10) { System.out.println("进入了if语句块"); } else if (a >= 10 && a <= 12) { System.out.println("进入了else if 语句块"); } else { System.out.println('进入了else语句块'); }
- 嵌套分支
- 在分支语句中还含有分支语句
/* 基本语法 if (条件表达式) { if () { } else { } } else { else语句块 } */ int a = 10; int b = 100; if ( a > 8 && a <= 10) { if( b > 77 ) { System.out.println('b大于77'); } else { System.out.println('b小于77'); } } else { System.out.println('进入了else语句块'); }
- switch语句
- 基本语法
/*switch(表达式){ case 表达式常量1: 语句1; [ break;] // [ ] 表示可选 case 表达式常量2: 语句2; [ break;] ...... case 表达式常量n: 语句n; [ break;] [default:语句n+1;] } */ // 输出今天是今年的第几天 import java.util.Scanner; public class test_3 { public static void main(String[] args) { int sumDays = 0; Scanner scan = new Scanner(System.in); System.out.println("请输入年份:"); int year = scan.nextInt(); System.out.println("请输入月:(1-12)"); int mouth = scan.nextInt(); System.out.println("请输入日:(1-31)"); // 输入一个整型天数 int day = scan.nextInt(); switch (mouth){ case 12: sumDays += 30; case 11: sumDays += 31; case 10: sumDays += 30; case 9: sumDays += 31; case 8: sumDays += 31; case 7: sumDays += 30; case 6: sumDays += 31;//6月24日 31+29+31+30+31+24 case 5: sumDays += 30; case 4: sumDays += 31; case 3: if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){ sumDays += 29; }else { sumDays += 28; } //sumDays += 29; case 2: sumDays += 31; case 1: sumDays += day; System.out.println(year + "年" + mouth + "月" + day + "日是" + year +"年的第" +sumDays + "天"); } } }
-
注意细节
- 1.表示式的数据类型应和case的数据类型一致或者是可以自动转换成可以比较的类型
- 2.表达式中的返回值类型必须是(byte,short,char,int,enum,String)
- 3.case的值必须是常量
- 4.default是可选的
- 5.当满足一个case时,如果没有break,则会直接执行下一个case,不会进行判断,直到遇到break,才会退出
-
练习
import java.util.Scanner; public class SwitchExercise{ public static void main(String[] args) { // 判断季节 (采用穿透的性质) System.out.println("请输入1-12月:"); Scanner myScanner = new Scanner(System.in); int month = myScanner.nextInt(); switch(month){ case 3: case 4: case 5: System.out.println(month + "月是春季"); break;//必须要有一个break来终止穿刺 case 6: case 7: case 8: System.out.println(month + "月是夏季"); break; case 9: case 10: case 11: System.out.println(month + "月是秋季"); break; case 1: case 2: case 12: System.out.println(month + "月是冬季"); break; default: System.out.println("请输入正确的月份"); break; } } }
-
循环控制
- for循环
- 简单循环
public class forExercise { public static void main(String[] args) { /* 基本语法 for(初始化语句;循环条件语句;控制条件语句) { 循环体语句 } */ for(int i = 1; i <= 3; i++ ) { System.out.println("我爱写代码"); } } }
- 嵌套循环
- 内层循环是外层循环的循环体语句
public class forExercise { public static void main(String[] args) { /* 基本语法 for(初始化语句;循环条件语句;控制条件语句) { 循环体语句 } */ for(int i = 1; i <= 3; i++ ) { for(int j = 1; j <= 2; j++) { System.out.println("我爱写代码"); } } } } ``` * **练习题** ```java import java.util.Scanner; // 导入类 public class MulForExercise { public static void main(String[] args) { /* 1.统计2个班的情况,每个班有3个同学 - 求出各班的平均分和所有班级的平均分 - 统计及格人数 */ Scanner myScanner = new Scanner(System.in); int classNum = 2; int stuNum = 3; double allScore = 0; // 所有总分 int passNum = 0; // 统计及格人数 for(int i = 1; i <= classNum; i++) { double totalScore = 0; // 统计每个班的总分 for(int j = 1; j <= stuNum; j++) { System.out.print("请输入" + i + "班" + j + "个同学的成绩:"); int socre = myScanner.nextInt(); totalScore += socre; allScore += socre; if( socre >= 60 ) { passNum += 1; } } System.out.println(i + "班的平均分为:" + (int)(totalScore/stuNum)); } System.out.println("总分数为:" + allScore + "总平均分为" + (allScore/(stuNum*classNum))); // 2.打印九九乘法表 for(int i = 1; i <= 9; i++) { for(int j = 1; j <= i; j++) { System.out.print(i + "x" + j + "\t"); } System.out.println(""); // 换行 } } }
- while循环
- 基本语法
/* while(条件表达式){ 循环体语句z 条件控制语句 } */ int num = 1; while(num < 10) { System.out.println("num=" + num); num ++; } ``` * 注意细节 - 条件表达式必须要能够返回一个boolean类型的值 - while必须要有条件控制语句,不然会形成死循环 + **dowhile循环** * 基本语法 ```java /* do { 循环体语句 条件控制语句 } while(条件表达式) */ int num = 1; do { System.out.println("num=" + num); num ++; } while(num < 10); ``` * 注意事项 - 条件表达式必须要能够返回一个boolean类型的值 - dowhile语句,循环体一定会被执行一次 + **braek、continue、return控制语句** * **break** - break 用于中断此次的循环,直接跳循环,但是不退出程序 - 一般用于 while、for、dowhile、switch * **continue** - continue 用于跳过此次循环,直接进入下一循环,也不退出程序 - 一般用于 while、for、dowhile、switch * **return** - return 用于退出程序,直接结束程序的执行,循环后的代码不再执行 * 三者的异同点 - continue、break 两者都不会退出程序,循环后的代码仍可以执行 - continue、break 可以通过标签 label 来指定跳出哪一级循环 ```java public class forExercise { public static void main(String[] args) { /* 基本语法 for(初始化语句;循环条件语句;控制条件语句) { 循环体语句 } */ label1: for(int i = 1; i <= 3; i++ ) { label2: for(int j = 1; j <= 2; j++) { System.out.println("我爱写代码"); if(j == 2) { // break; // 默认是跳出内层循环 break label1 // 跳出外层循环 } } } } }
- 流程控制作业
public class ControlProcessExercise { public static void main(String[] args) { /* 某人有100000元,经过一个路口,需要缴费: 1.当现金>50000元时,每次交5% 2.当现金<=50000元时,每次交1000 可以经过多少次路口? */ int money = 100000; int times = 0; while(money > 0) { if( money >50000 ) { money -= money * 0.05; times +=1; } else if (money <= 50000 && money >= 1000) { money -=1000; times +=1; } else{ break; } } System.out.println("可以经过" + times + "次路口"); // 二、判断一个整数是不是水鲜花数 System.out.print("请输入一个整数:"); int num = myScanner.nextInt(); int verification = num;//保存num 后面用来验证是否想的 int total = 0; while(num >0) { int remainder = num % 10; total += remainder*remainder*remainder; num = num / 10; } if( total == verification) { System.out.println(verification + "这个数是水仙花数"); } else { System.out.println(verification + "这个数不是水仙花数"); } // 三、输出1-100之间的不能被5整除的数,每五行一个 int count = 0; // 用来控制换行 for (int i =1; i<=100; i++) { if(i % 5 == 0) { continue; } else { System.out.print(i + "\t"); count ++; if(count == 5){ System.out.println(""); count = 0; } } } // 四、 1-1/2+1/3+1/4....1/100 的和 double total = 0; // 注意初始化定义,1/(double)i for(double i = 1; i <= 100; i++) { if(i % 2 == 0) { total -= (1 / i); } else { total += (1 / i); } } System.out.println(total); // 0.688172179310195 // 五、计算 1 + (1+2) + (1+2+3) + ... + (1+...+100) int total = 0; for (int i = 1; i <= 100; i++) { for(int j = 1; j <= i; j++) { total += j; } } System.out.println(total);// 171700 /* 六、打印空心等腰三角形 * * * * * * * ********* */ int starLevel = 10; // 控制打印行数 for(int i = 1; i <= starLevel; i++) { for(int k = starLevel-i; k >0; k--) { System.out.print(" "); } // 控制打印个数 for(int j = 1; j <= 2*i - 1; j++) { // 如果是 第一个或是最后一个打印星星,或者最后一行打印星星 if(j == 1 || j == 2*i - 1 || i == starLevel) { System.out.print("*"); } else { System.out.print(" "); } } System.out.println(""); // 换行 } } }
- for循环