选择结构
检查问题
1.类名采用了小驼峰
2.包名采用了大写
3.运算符左右没留空格
int num = 10;
System.out.println(“我的年龄是:” + num);
4.注释的//和注释之间没有留空格
// 这是注释
5.变量乱起名
你可以用有道词典来搜索对应的意思
身高:name
身高*身高:age2
6.代码中一行注释也没有
代码要包含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.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的区别
swith只能用于等值判断情况,而多重if还可以用于范围性判断
swith在JDK发展过程中,一直在升级,足以证明Java官方对它的重视
swith在性能方面相较于多重if更有优势
swith在做等值判断时,有其是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);