选择结构
检查问题分析
-
类名采用了小驼峰(目前只有一个)
-
包名采用了大写(目前只有一个)
-
运算符左右没留空格(目前很多)
int num = 10;
System.out.println("我的年龄是:" + num);
-
注释的
//
和注释内容之间没有留空格(目前2 - 3人)// 这是注释
-
变量乱起名(目前两人)
- 你可以用有道词典来搜索对应的意思
- 身高:name
- 身高 * 身高:age2
-
交作业的时间非要卡在 DieLine
-
代码中一行注释也没有
- 代码要包含40%以上的注释
- 注释写代码的含义或者你的思路或者你反复也记不住的
流程控制语句
任何一个语言编写出来的程序都包含这三种控制语句,因为它们可以让你的程序变得“丰富多彩”。
顺序控制语句
// 顺序流程语句
// 自上而下
System.out.println("我是语句1");
System.out.println("我是语句2");
System.out.println("我是语句3");
选择控制语句
根据条件表达式,决定一部分代码是否可以正常执行。
条件表达式就是利用 关系运算符 和 逻辑运算符 来实现判断的过程,结果永远为 布尔类型:true(真、成立)、false(假、不成立)。
循环控制语句
可以帮助我们解决重复性的工作问题。
三种流程控制语句是要结合使用,每种都有它能解决的问题。
流程图绘制
UML
if系列选择结构
基础if
if:如果
if (条件表达式) {
// 条件成立时执行的代码段
}
Scanner scan = new Scanner(System.in);
System.out.print("请输入您的年龄:");
int age = scan.nextInt();
// 判断
// 如果你的年龄是大于等于18的
if (age >= 18) {
// 那么就提示你可以进入网吧了
System.out.println("可以进入网吧啦!");
}
复杂条件的情况,因为业务需要,经常要结合逻辑运算符来实现条件表达式。
Scanner input = new Scanner(System.in);
System.out.print("请输入乔治的Java成绩:");
double javaScore = input.nextDouble();
System.out.print("请输入乔治的音乐成绩:");
double musicScore = input.nextDouble();
if ((javaScore > 90 && musicScore > 80) ||
(javaScore == 100 && musicScore > 70)) {
System.out.println("查老师会奖励他一顿棒子'炖'肉!");
}
可读性非常高,边读边写都可以。
互斥if
if (条件) {
// 条件成立时执行的
} else {
// 条件不成立时执行的
}
如果用基础if来实现一些互斥效果内容,效果如下:
Scanner input = new Scanner(System.in);
System.out.print("请输入乔治的Java成绩:");
double javaScore = input.nextDouble();
System.out.print("请输入乔治的音乐成绩:");
double musicScore = input.nextDouble();
if ((javaScore > 90 && musicScore > 80) ||
(javaScore == 100 && musicScore > 70)) {
System.out.println("查老师会奖励他一顿棒子'炖'肉!");
}
if (!((javaScore > 90 && musicScore > 80) ||
(javaScore == 100 && musicScore > 70))) {
System.out.println("查老师会奖励他给查老师买一个 iPhone 11!");
}
Scanner input = new Scanner(System.in);
System.out.print("请输入您的年龄:");
int age = input.nextInt();
// 判断
if (age >= 18) {
System.out.println("网管:可以进来啦!");
}
if (age < 18) {
System.out.println("网管:滚");
}
互斥if写法:
Scanner input = new Scanner(System.in);
System.out.print("请输入您的年龄:");
int age = input.nextInt();
// 判断
if (age >= 18) {
System.out.println("网管:可以进来啦!");
} else {
System.out.println("网管:滚");
}
多重if
多分支的判断,按照自上而下的执行判断,只要有一个满足就不再向后执行其他的条件判断。
if (条件1) {
// 条件1成立时执行的代码段
} else if (条件2) {
// 条件2成立时执行的代码段
} else if (..略..) {
// ...略...
} else {
// 上方条件都不满足时执行的代码段
}
// 选择:基础if
Scanner input = new Scanner(System.in);
System.out.print("请输入佩奇的Java成绩:");
double score = input.nextDouble();
// 判断
if (score >= 80) {
System.out.println("奖励她一部 OnePlus 8 Pro");
}
// 60 <= score < 80
if (score >= 60 && score < 80) {
System.out.println("奖励她一部一加云耳");
}
if (score < 60){
System.out.println("奖励她给查老师买一部 iPhone 11 Pro");
}
// 选择:基础if
Scanner input = new Scanner(System.in);
System.out.print("请输入佩奇的Java成绩:");
double score = input.nextDouble();
// 判断
if (score >= 80) {
System.out.println("奖励她一部 OnePlus 8 Pro");
} else if (score >= 60) {
System.out.println("奖励她一部一加云耳");
} else {
System.out.println("奖励她给查老师买一部 iPhone 11 Pro");
}
多重if在编写条件判断时,注意不要胡乱放置条件,越容易满足或者范围越大的条件应该尽可能放下面。
在做范围型多条件判断时,多重if拥有非常好的优势。
嵌套if
它不是什么特别技术,就是前面的几个if的延伸而已。
// 外部条件不成立,内部条件是不会执行的
if (外部条件) {
if (内部条件) {
}
}
Scanner input = new Scanner(System.in);
System.out.print("请输入您百米赛跑的成绩:");
double score = input.nextDouble();
// 判断是否能进入决赛
if (score <= 10) {
System.out.println("恭喜您进入决赛!");
// 根据性别分组
System.out.print("请输入您的性别:");
String gender = input.next();
// equals:等于、相等
// 字符串.equals(字符串) 可以用来判断两个字符串内容是否相同
if (gender.equals("男")) {
System.out.println("男子组欢迎你!");
} else {
System.out.println("女子组欢迎你!");
}
} else {
System.out.println("很遗憾!下次继续!");
}
由于嵌套if会导致结构愈加混乱,所以使用时注意层级不要嵌套太多。否则容易出现你写的代码,你看不懂这类问题。
而且一般嵌套两层或三层,如果再多一般要考虑其他解决方案。
switch选择结构
多重if在做范围型的多条件判断比较有优势,而做等值判断并没有太优异的表现。
Scanner input = new Scanner(System.in);
System.out.print("请输入小杨的最终名次:");
int level = input.nextInt();
// 使用多重if判断
if (level == 1) {
System.out.println("诛仙女猪脚!");
} else if (level == 2) {
System.out.println("斗罗大陆女猪脚!");
} else if (level == 3) {
System.out.println("永夜女猪脚!");
} else {
System.out.println("还想演戏?先拜拜自己吧!");
}
而switch选择结构则恰恰弥补了此问题。
// switch:切换
// case:情况、场景
// break:中断
// default:缺省的,默认的
switch (表达式) {
case 常量值:
// 代码段
break;
case 常量值:
// 代码段
break;
....
default:
// 默认处理
break;
}
Scanner input = new Scanner(System.in);
System.out.print("请输入小杨的最终名次:");
int level = input.nextInt();
switch (level) {
case 1: // level == 1
System.out.println("诛仙女猪脚!");
break;
case 2: // level == 2
System.out.println("斗罗大陆女猪脚!");
break;
case 3: // level == 3
System.out.println("永夜女猪脚!");
break;
default: // level == 4
System.out.println("还想演戏?先拜拜自己吧!");
break;
}
注意事项
-
switch中表达式只能使用 int(byte、short、char)、String(JDK1.7起支持)、枚举类型
- byte、short、char可以自动类型转换为int
-
每一个 case 都要写break,否则会出现case的穿透性,穿透直到下一个break或结束为止
Scanner input = new Scanner(System.in); System.out.print("小度小度,今天星期几?"); int dayOfWeek = input.nextInt(); switch (dayOfWeek) { case 1: case 2: case 3: case 4: case 5: System.out.println("好好工作"); break; case 6: case 7: System.out.println("好好休息!"); break; }
-
建议编写一个默认情况在最后,以防止一些判断未执行的情况
和if的区别
- switch只能用于等值判断情况,而多重if还可以用于范围型判断
- switch在JDK发展过程中,一直在升级,足以证明Java官方对它的重视
- switch在性能方面相较于多重if更有优势
- switch在做等值判断时,尤其是JDK1.7之后,字符串判断比if更加方便
随机数的获取
Math.random()
可以获取到[0.0, 1.0)之间的随机小数。(>=0.0 并且 < 1.0)
// [0.0, 1.0)
// double num = Math.random();
// System.out.println(num);
// [5, 10) 随机整数
// 【公式】(int)(Math.random() * (最大值 - 最小值) ) + 最小值
// [0.0, 1.0) -> [0.0, 5.0) -> [0, 5) -> [5, 10)
int num = (int)(Math.random() * 5) + 5;
System.out.println(num);