【Java】逻辑控制 —— 三大结构 和 猜数字游戏

目录

[1. 顺序结构](#1. 顺序结构)

[2. 分支结构【与C略有不同】](#2. 分支结构【与C略有不同】)

[2.1 if语句](#2.1 if语句)

[2.2 switch语句](#2.2 switch语句)

注意事项【与C不同】

[3. 循环结构【与C略有不同】](#3. 循环结构【与C略有不同】)

[3.1 while循环](#3.1 while循环)

[* break和continue](#* break和continue)

[3.2 for循环](#3.2 for循环)

[3.3 do while循环](#3.3 do while循环)

[* 输入的判断(hasNext)](#* 输入的判断(hasNext))

[4. 猜数字游戏](#4. 猜数字游戏)


1. 顺序结构

顺序结构比较简单,按照代码书写的顺序一行一行执行。

cpp 复制代码
System.out.println("aaa");
 System.out.println("bbb");
 System.out.println("ccc");
 
// 运行结果
aaa
bbb
ccc

如果调整代码的书写顺序, 则执行顺序也发生变化。

cpp 复制代码
System.out.println("aaa");
 System.out.println("ccc");
 System.out.println("bbb");
 
// 运行结果
aaa
ccc
bbb

2. 分支结构【与C略有不同】

2.1 if语句

语法格式1:

if (布尔表达式){

// 语句

}

注意:if中的表达式一定是布尔表达式。例如C语言中的" if ( a )",在Java语言中必须写成" if (a!=0)".

如果布尔表达式结果为true执行if中的语句,否则不执行。

比如:小明,如果这次考试考到90分或以上,给你奖励一个鸡腿。

cpp 复制代码
 int score = 92;
 if(score >= 90){
    System.out.println("吃个大鸡腿!!!");
 }

语法格式2:

if(布尔表达式){

// 语句1

} else {

// 语句2

}
如果布尔表达式结果为true,则执行if中语句,否则执行else中语句

比如:小明,如果这次考到90分以上,给你奖励一个大鸡腿,否则奖你一个大嘴巴子。

cpp 复制代码
int score = 92;
 if(score >= 90){
    System.out.println("吃个大鸡腿!!!");
 }else{
    System.out.println("挨大嘴巴子!!!");
 }

语法格式3:

if(布尔表达式1){

// 语句1

} else if (布尔表达式2){

// 语句2

} else {

// 语句3

}
如果表达式1成立,执行语句1;如果表达式2成立,执行语句2;否则执行语句3。

比如:考虑到学生自尊,不公开分数排名,因此: 分数在 [90, 100] 之间的,为优秀 分数在 [80, 90) 之前的,为良好 分数在 [70, 80) 之间的,为中等 分数在 [60, 70) 之间的,为及格 分数在 [ 0, 60) 之间的,为不及格 错误数据 按照上述办法通知学生成绩。

cpp 复制代码
 if(score >= 90){
    System.out.println("优秀");
 }else if(score >= 80 && score < 90){
    System.out.println("良好");
 }else if(score >= 70 && score < 80){
    System.out.println("中等");
 }else if(score >= 60 && score < 70){
    System.out.println("及格");
 }else if(score >= 0 && score < 60){
    System.out.println("不及格");
 }else{
    System.out.println("错误数据");
 }

2.2 switch语句

基本语法:

switch(表达式){

case 常量值1:{

语句1;

[break;]

}

case 常量值2:{

语句2;

[break;]

}

default:{

内容都不满足时执行语句;

[break;]

}

}
执行流程:

  1. 先计算表达式的值
  2. 和case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束
  3. 当表达式的值没有与所列项匹配时,执行default

case 和 default 后面的大括号{}可以不写。

代码示例: 根据 day 的值输出星期

cpp 复制代码
 int day = 1;
 switch(day) {
    case 1:
        System.out.println("星期一");
        break;
    case 2:
        System.out.println("星期二");
        break;
    case 3:
        System.out.println("星期三");
        break;
    case 4:
        System.out.println("星期四");
        break;
    case 5:
        System.out.println("星期五");
        break;
    case 6:
        System.out.println("星期六");
        break;
    case 7:
        System.out.println("星期日");
        break;
    default:
        System.out.println("输入有误");
        break;
 }

一些建议和规则:

  • 多个case后的常量值不可以重复。
  • break 不要遗漏, 否则会失去 "多分支选择" 的效果
  • switch 不能表达复杂的条件(不能用switch语句判断区间)
  • switch 虽然支持嵌套, 但是很丑,一般不推荐~

注意事项【与C不同】

switch的括号内只能是以下类型的表达式:

  • 基本类型:byte、char、short、int。【注意不能是long类型和boolean类型】
  • 引用类型:String常量串、枚举类型。

使用long类型或boolean类型会报错:

可以使用字符串类型:

cpp 复制代码
public static void main(String[] args) {
        String a = "hello";
        switch(a){
            case "true":
                System.out.println("true");
                break;
            case "false":
                System.out.println("false");
                break;
            default:
                System.out.println(a);
        }
    }

输出:

3. 循环结构【与C略有不同】

3.1 while循环

语法格式:

复制代码
 while(循环条件){
    循环语句;
}

循环条件为 true, 则执行循环语句; 否则结束循环.

注意:while中的循环条件也必须是布尔表达式,这点与C语言不一样。

代码示例1: 打印 1 - 10 的数字

cpp 复制代码
int num = 1;
 while (num <= 10) {
    System.out.println(num);
    num++;
 }

* break和continue

break

break 的功能是让循环提前结束.

代码示例: 找到 100 - 200 中第一个 3 的倍数

cpp 复制代码
 int num = 100;
 while (num <= 200) {
    if (num % 3 == 0) {
        System.out.println("找到了 3 的倍数, 为:" + num);
        break;
    }
    num++;
 }
 
// 执行结果
找到了 3 的倍数, 为:102

执行到 break 就会让循环结束.

continue

continue 的功能是跳过这次循环, 立即进入下次循环.

代码示例: 找到 100 - 200 中所有 3 的倍数

cpp 复制代码
int num = 100;
 while (num <= 200) {
    if (num % 3 != 0) {
        num++;  // 这里的 ++ 不要忘记! 否则会死循环. 
        continue;
    }
    System.out.println("找到了 3 的倍数, 为:" + num);
    num++;
 }

执行到 continue 语句的时候, 就会立刻进入下次循环(判定循环条件), 从而不会执行到下方的打印语句.

3.2 for循环

基本语法:

for(表达式①;布尔表达式②;表达式③){

表达式④;

}

  • 表达式1: 用于初始化循环变量初始值设置,在循环最开始时执行,且只执行一次。(该表达式可以没有)
  • 表达式2: 循环条件,满则循环继续,否则循环结束。
  • 表达式3: 循环变量更新方式。
    执行过程:

①②③④--->②③④--->②③④--->②③④--->②③④--->②③④--->...--->②为false,循环结束。

例子,计算 1 - 100 的和:

cpp 复制代码
 int sum = 0;
 for (int i = 1; i <= 100; i++) {
    sum += i;
 }
 System.out.println("sum = " + sum);
 
// 执行结果
5050

3.3 do while循环

语法格式:

do{

循环语句;

}while(循环条件);

先执行循环语句, 再判定循环条件,循环条件成立则继续执行,否则循环结束。

【注意事项】

  1. do while 循环最后的分号不要忘记
  2. 一般 do while 很少用到, 更推荐使用 for 和 while.

* 输入的判断(hasNext)

当我们以循环读入的结束判断作为while的循环条件的话,我们需要用到hasnext。

例如:使用 Scanner 循环读取 N 个数字,并求取其平均值

cpp 复制代码
 Scanner sc = new Scanner(System.in);
 int sum = 0;
 int num = 0;
 while (sc.hasNextInt()) {
    int tmp = sc.nextInt();
    sum += tmp;
    num++;
 }
 System.out.println("sum = " + sum);
 System.out.println("avg = " + sum / num);
 sc.close();
cpp 复制代码
// 执行结果
 10
 40.0
 50.5
 ^Z
 sum = 150.5
 avg = 30.1

注意事项: 当循环输入多个数据的时候, 使用 ctrl + z 来结束输入 (Windows 上使用 ctrl + z, Linux / Mac 上使用 ctrl + d).

这里对输入数据的判断方法是Random.nextInt(),如果输入的不是整数,或者输入的是ctrl+z,循环就会停止。

还有其他常用类型的循环输入判断方法:

4. 猜数字游戏

**游戏规则:**系统自动生成一个随机整数(1-100), 然后由用户输入一个猜测的数字. 如果输入的数字比该随机数小, 提示 "低 了", 如果输入的数字比该随机数大, 提示 "高了" , 如果输入的数字和随机数相等, 则提示 "猜对了" .

参考代码

cpp 复制代码
import java.util.Random;
import java.util.Scanner;

public static void main1(String[] args) {
        Scanner sc = new Scanner(System.in);//扫描仪
        Random rd = new Random();   //随机数生成器 //不输入参数,种子是时间戳

        int num = rd.nextInt(100);  //返回区间[0,100)的数字
        System.out.println("请输出数字:(0-100)");
        while(true){
            int n = sc.nextInt();

            if(n > num){
                System.out.println("猜大了,请继续:");
            }else if(n < num){
                System.out.println("猜小了,请继续:");
            }else{
                System.out.println("恭喜你,猜对了!");
                break;
            }

        }
        sc.close();
    }

几点解析:

  • Random类是一个随机数生成器,使用时会自动导入包 java.util.Random。
  • 当调用构造方法Random( )时,如果不输入参数,则随机数种子是当前时间的时间戳;如果自己输入一个固定值,则每次产生的随机数都相同。【相当于C语言中 srand()函数与 time()函数 的结合】
  • Randon.nexInt()方法会返回一个随机整数值。如果不输入参数,这个值的范围就是int类型的范围,即0~2^31-1。如果输入参数,则该值的范围就是[0, 参数值)(注意左边是闭区间,右边是开区间)。【相当于C语言中 rand()函数】

本期分享完毕,感谢大家的支持Thanks♪(・ω・)ノ

相关推荐
Re.不晚3 分钟前
Java入门15——抽象类
java·开发语言·学习·算法·intellij-idea
老秦包你会5 分钟前
Qt第三课 ----------容器类控件
开发语言·qt
凤枭香8 分钟前
Python OpenCV 傅里叶变换
开发语言·图像处理·python·opencv
雷神乐乐9 分钟前
Maven学习——创建Maven的Java和Web工程,并运行在Tomcat上
java·maven
ULTRA??12 分钟前
C加加中的结构化绑定(解包,折叠展开)
开发语言·c++
码农派大星。12 分钟前
Spring Boot 配置文件
java·spring boot·后端
顾北川_野19 分钟前
Android 手机设备的OEM-unlock解锁 和 adb push文件
android·java
江深竹静,一苇以航21 分钟前
springboot3项目整合Mybatis-plus启动项目报错:Invalid bean definition with name ‘xxxMapper‘
java·spring boot
远望清一色28 分钟前
基于MATLAB的实现垃圾分类Matlab源码
开发语言·matlab
confiself37 分钟前
大模型系列——LLAMA-O1 复刻代码解读
java·开发语言