选择结构

选择结构

检查问题分析

  1. 类名采用了小驼峰(目前只有一个)

  2. 包名采用了大写(目前只有一个)

  3. 运算左右没留空格(目前很多)

    int num = 10;

    System.out.println("我的年龄是: " + num);

  4. 注释的//和注释内容之间没有留空格(目前2 - 3人)

    // 这是注释

  5. 变量乱起名(目前两人)

    • 你可以用有道词典来搜索对应的意思
    • 身高:name
    • 身高 * 身高 :age2
  6. 交作业的时间非要卡在DieLine

  7. 代码中一行注释也没有

    • 代码要包含40%以上的注释
    • 注释写代码的含义或者你的思路或者你反复记不住的

流程控制语句

任何一个语言编写出来的程序都包含这三种控制语句,因为它们可以让你的程序变得"丰富多彩"。

顺序控制语句

// 顺序流程语句
// 自上而下
System.out.println("我是语句1");
System.out.println("我是语句2");
System.out.println("我是语句3");

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vZl8XPe6-1611725054477)(C:\Users\w0321\AppData\Roaming\Typora\typora-user-images\image-20210108141407890.png)]

选择控制语句

根据条件表达式,表示一部分代码是否可以正常运行。

条件表达式就是利用 关系运算符 和 逻辑运算符 来实现判断的过程,结果永远为 布尔类型:true(真、成立)、false(假、不成立)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W5i8M0PE-1611725054479)(C:\Users\w0321\AppData\Roaming\Typora\typora-user-images\image-20210108141302670.png)]

循环控制语句

可以帮助我们解决重复性的工作问题。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RIHdKZ51-1611725054480)(C:\Users\w0321\AppData\Roaming\Typora\typora-user-images\image-20210108141245502.png)]

三种流程控制语句是要结合使用,每种都有它能解决的问题。

流程图绘制

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;
}

注意事项

  1. switch中表达式只能使用 int(byte、short、char)、String(JDK1.7起支持)、枚举类型

    • byte、short、char可以自动类型转换为int
  2. 每一个 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;
    }
    
  3. 建议编写一个默认情况在最后,以防止一些判断未执行的情况

和if的区别

  • switch只能用于等值判断情况,而多重if还可以用于范围型判断
  • switch在JDK发展过程中,一直在升级,足以证明Java官方对它的重视
  • switch在性能方面相较于多重if更有优势
  • swutch在做等值判断时,尤其是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);

  • swutch在做等值判断时,尤其是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);
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页