java程序流程控制之二:
- Ⅰ、分支语句:switch-case
- 1、switch-case 分支结构:
- 其一、描述:
- 其二、代码为:
- 其三、截图为:
- 2、switch-case 分支结构的案例1:判断是否合格
- 其一、描述:
- 其二、方式一代码为:
- 其三、方式一截图为:
- 其四、方式二代码为:
- 其五、方式二截图为:
- 3、switch-case 分支结构的案例2:月日计算
- 其一、描述:
- 其二、代码为:
- 其三、截图为:
- 4、switch-case 分支结构的案例3:年月日计算
- 其一、描述:
- 其二、代码为:
- 其三、截图为:
- Ⅱ、循环结构:for 循环
- 1、for 循环结构:
- 其一、描述:
- 其二、代码为:
- 其三、截图为:
- 2、for 循环结构的案例1:循环并按条件输出特定字符
- 其一、描述:
- 其二、代码为:
- 其三、截图为:
- 3、for 循环结构的案例2:可能存在的编译报错
- 其一、描述:
- 其二、代码为:
- 其三、截图为:
- 4、for 循环结构的案例3:求最大公约数和最小公倍数(以及break的使用)
- 其一、描述:
- 其二、代码为:
- 其三、截图为:
- Ⅲ、小结:
Ⅰ、分支语句:switch-case
1、switch-case 分支结构:
其一、描述:
分支结构之二:switch-case1.格式
switch(表达式){
case 常量1:执行语句1;//break;case 常量2:执行语句2;//break;...default:执行语句n;//break;}2.说明:
① 根据switch表达式中的值(一般是变量),依次匹配各个case中的常量。一旦匹配成功,则进入相应case结构中,调用其执行语句;当调用完执行语句以后,则仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或此switch-case结构末尾结束为止。② break,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构;③ switch结构中的表达式(不再是条件表达式(即:只能是true/false)),只能是如下的6种数据类型之一:byte 、short、char、int、枚举类型(JDK5.0新增)、String类型(JDK7.0新增)④ case 之后只能声明常量,不能声明范围;⑤ break关键字是可选的(即:根据实际情况来确定该不该加这个关键字);⑥ default:相当于if-else结构中的else;default结构是可选的(即:根据实际情况来确定该不该加这个关键字),而且位置是灵活的(即:可以放在任何位置且不影响最终输出的结果的前提是在 default 中用 break 关键字);
其二、代码为:
class SwitchCaseTest {public static void main(String[] args) {int number = 5;switch(number){case 0:System.out.println("zero");break;case 1:System.out.println("one");break;case 2:System.out.println("two");break;case 3:System.out.println("three");break;default:System.out.println("other");//break;}String season = "summer";switch (season) {case "spring":System.out.println("春暖花开");break;case "summer":System.out.println("夏日炎炎");break;case "autumn":System.out.println("秋高气爽");break;case "winter":System.out.println("冬雪皑皑");break;default:System.out.println("季节输入有误");break;}//**************如下的两种情况都编译不通过*********************//情况一: 表达式是布尔型(严格下的 float/double 类型);/*boolean isHandsome = true;switch(isHandsome){case true:System.out.println("我好帅啊~~~");break;case false:System.out.println("我好丑啊~~~");break;default:System.out.println("输入有误~~~");}*///情况二: case 之后只能声明常量,不能声明范围;/*int age = 10;switch(age){case age > 18:System.out.println("成年了");break;default:System.out.println("未成年");}*/}
}
其三、截图为:
2、switch-case 分支结构的案例1:判断是否合格
其一、描述:
例题:对学生成绩大于60分的,输出“合格”; 低于60分的,输出“不合格”;说明:如果switch-case结构中的多个case的执行语句相同,则可以考虑进行合并;
其二、方式一代码为:
// 在成绩为 78 时的输出结果为:及格;
class SwitchCaseTest1 {public static void main(String[] args) {int score = 78;switch(score / 10){case 0:case 1:case 2:case 3:case 4:case 5:System.out.println("不及格");break;case 6:case 7:case 8:case 9:case 10:System.out.println("及格");break;}}
}
其三、方式一截图为:
其四、方式二代码为:
// 在成绩为 78 时的输出结果为:及格;
class SwitchCaseTest1 {public static void main(String[] args) {int score = 78;//更优的解决方案:switch(score / 60){case 0:System.out.println("不及格");break;case 1:System.out.println("及格");break;}}
}
其五、方式二截图为:
3、switch-case 分支结构的案例2:月日计算
其一、描述:
编写程序:从键盘上输入2019年的“month”和“day”,要求通过程序输出输入的日期为2019年的第几天。2.15: 31 + 155.7: 31 + 28 + 31 + 30 + 7 ....说明: break在switch-case中是可选的;
其二、代码为:
//输入月日,来计算某月某日是 2019 年的第几天;
import java.util.Scanner;class SwitchCaseTest2 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.println("请输入2019年的month:");int month = scan.nextInt();System.out.println("请输入2019年的day:");int day = scan.nextInt();//定义一个变量来保存总天数int sumDays = 0;//方式一:冗余/*if(month == 1){sumDays = day;}else if(month == 2){sumDays = 31 + day;}else if(month == 3){sumDays = 31 + 28 + day;}else if(month == 4){sumDays = 31 + 28 + 31 + day;}//...else{//month == 12//sumDays = ..... + day;}*///方式二:冗余/*switch(month){case 1:sumDays = day;break;case 2:sumDays = 31 + day;break;case 3:sumDays = 31 + 28 + day;break;...}*/switch(month){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;case 5:sumDays += 30;case 4:sumDays += 31;case 3:sumDays += 28;case 2:sumDays += 31;case 1:sumDays += day;}System.out.println("2019年" + month + "月" + day + "日是当年的第" + sumDays + "天");}
}
其三、截图为:
4、switch-case 分支结构的案例3:年月日计算
其一、描述:
从键盘分别输入年、月、日,判断这一天是当年的第几天注:判断一年是否是闰年的标准:1)可以被4整除,但不可被100整除或2)可以被400整除说明:
1. 凡是可以使用switch-case的结构,都可以转换为if-else。反之,不成立。
不成立的原因:因为 switch 中的表达式有要求,浮点型,布尔型,范围值都做不了;
2. 我们写分支结构时,当发现既可以使用switch-case,(同时,switch中表达式的取值情况不太多),又可以使用if-else时,我们优先选择使用switch-case;原因:switch-case执行效率稍高;
其二、代码为:
//输入年月日,来计算某年某月某日是某年的第几天;
import java.util.Scanner;class SwitchCaseExer {public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.println("请输入year:");int year = scan.nextInt();System.out.println("请输入month:");int month = scan.nextInt();System.out.println("请输入day:");int day = scan.nextInt();//定义一个变量来保存总天数int sumDays = 0;switch(month){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;case 5:sumDays += 30;case 4:sumDays += 31;case 3://sumDays += 28;//判断year是否是闰年if((year % 4 == 0 && year % 100 != 0 ) || year % 400 == 0){sumDays += 29;}else{sumDays += 28;}case 2:sumDays += 31;case 1:sumDays += day;}System.out.println(year + "年" + month + "月" + day + "日是当年的第" + sumDays + "天");}
}
其三、截图为:
Ⅱ、循环结构:for 循环
1、for 循环结构:
其一、描述:
For循环结构的使用一、循环结构的4个要素
① 初始化条件
② 循环条件 --->是boolean类型
③ 循环体
④ 迭代条件二、for循环的结构
for(①;②;④){③
}执行过程:① - ② - ③ - ④ - ② - ③ - ④ - ... - ②
其二、代码为:
class ForTest {public static void main(String[] args) {/*System.out.println("Hello World!");System.out.println("Hello World!");System.out.println("Hello World!");System.out.println("Hello World!");System.out.println("Hello World!");*/for(int i = 1;i <= 5;i++){//i:1,2,3,4,5System.out.println("Hello World!");//输出5个"Hello World!";}//i:在for循环内有效,出了for循环就失效了;//System.out.println(i);//练习://在部分四(即:迭代条件)中,有两个执行语句,而执行语句之间是通过 ',' 来连接;int num = 1;for(System.out.print('a');num <= 3;System.out.print('c'),num++){System.out.print('b');}//输出结果:abcbcbcSystem.out.println();//换行//例题:遍历100以内的偶数,输出所有偶数的和,输出偶数的个数int sum = 0;//记录所有偶数的和int count = 0;//记录偶数的个数for(int i = 1;i <= 100;i++){if(i % 2 == 0){System.out.println(i);//输出:1-100的偶数;sum += i;count++;}//System.out.println("总和为:" + sum);}System.out.println("总和为:" + sum);//2550System.out.println("个数为:" + count);//50}
}
其三、截图为:
2、for 循环结构的案例1:循环并按条件输出特定字符
其一、描述:
编写程序从1循环到150,并在每行打印一个值,
另外在每个3的倍数行上打印出“foo”,
在每个5的倍数行上打印“biz”,
在每个7的倍数行上打印输出“baz”。
其二、代码为:
class ForTest1 {public static void main(String[] args) {for(int i = 1;i <= 150;i++){System.out.print(i + " ");//将i输出;if(i % 3 == 0){System.out.print("foo ");}if(i % 5 == 0){System.out.print("biz ");}if(i % 7 == 0){System.out.print("baz ");}//换行System.out.println();}}
}
其三、截图为:
3、for 循环结构的案例2:可能存在的编译报错
其一、描述:
在使用 for 循环的过程中,可能会遇到的编译报错:
其一、变量只声明而未赋值,编译报错;
其二、未初始化变量,编译报错;
其二、代码为:
class ReviewTest{public static void main(String[] args){//int sum;//for(int i = 1;i <= 100;i++){// if(i % 2 != 0){// System.out.println(i);// sum += i;// }//}//System.out.println(sum);//此时编译报错,因为 sum 只声明而未赋值,运算时报错;//报错点:sum += i 和 System.out.println(sum)//int sum;//for(int i = 1;i <= 100;i++){// if(i % 2 != 0){// System.out.println(i);// sum = i;// }//}//System.out.println(sum);//此时编译报错,因为 sum 只声明而未赋值,运算时报错;//报错点:System.out.println(sum)//int sum;//for(int i = 1;i <= 100;i++){// if(i % 2 != 0){// System.out.println(i);// sum = i;// }else{// sum = 1;// }//}//System.out.println(sum);//此时编译报错,因为 sum 只声明而未赋值,运算时报错;//报错点:System.out.println(sum),可能尚未初始化变量sum,因为 for 循环可能进不去;int sum ;//for(int i = 1;i <= 100;i++){if(4 % 2 != 0){//System.out.println(i);sum = 1;}else{sum = 2;}//}System.out.println(sum);//2//此时编译就能过,因为 sum 肯定会被赋值,不会出现未被初始化的问题;}}
其三、截图为:
4、for 循环结构的案例3:求最大公约数和最小公倍数(以及break的使用)
其一、描述:
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
比如:12和20的最大公约数是4,最小公倍数是60。说明:break关键字的使用:一旦在循环中执行到break,就跳出循环
其二、代码为:
import java.util.Scanner;
class ForTest{public static void main(String[] args){Scanner scan = new Scanner(System.in);System.out.println("请输入第一个正整数:");int m = scan.nextInt();System.out.println("请输入第二个正整数:");int n = scan.nextInt();//获取最大公约数//1.获取两个数中的较小值int min = (m <= n)? m : n;//2.遍历for(int i = min;i >= 1 ;i--){if(m % i == 0 && n % i == 0){System.out.println("最大公约数为:" + i);break;//一旦在循环中执行到break,就跳出循环;}}//获取最小公倍数//1.获取两个数中的较大值int max = (m >= n)? m : n;//2.遍历for(int i = max;i <= m * n;i++){if(i % m == 0 && i % n == 0){System.out.println("最小公倍数:" + i);break;}}}
}
其三、截图为:
Ⅲ、小结:
其一、哪里有不对或不合适的地方,还请大佬们多多指点和交流!
其二、若有转发或引用本文章内容,请注明本博客地址(直接点击下面 url 跳转
) https://blog.csdn.net/weixin_43405300,创作不易,且行且珍惜!