Java 学习之路(十八)- 循环和判断的总结

注释

单行注释

  • // 为开始,到这一行结束都是注释内容
  • 注释可以是任何内容
  • 可以在一行的开始注释,也可以在程序内容后面添加注释
  • 注释不会对程序有任何影响

多行注释

使用 /* 开头, */ 结尾,中间是注释内容。

生成指定范围内的随机数

新功能

Math.random() 生成随机数,随机数在 0 到 1 之间,类型是 double

生成一个在指定范围内的随机正整数程序关键点

  • 得到随机数,Java 支持得到的 0 到 1 的 double 类型的随机数
  • 确定基本的数学方法
  • 运用取模运算符
  • 使用强制类型转换
  • 确保生成的数字在指定的范围内。极限思维,假设随机数是 0 或者 1,结果是多?假设取模后是0 或者 mod-1,结果会是多少?
double randNum = 0;

// 生成一个大于 0.5 的随机数
while (randNum < 0.5) {
    
    
    randNum = Math.random();
    System.out.println(randNum);
}

int rangeStart = 99;
int rangeEnd = 180;

for (int i = 0; i < 100; i++) {
    
    
    // 确定模
    int mod = rangeEnd - rangeStart;

    //生成随机数
    randNum = Math.random();
    // num的值会在0到mod-1,也就是0到rangeEnd - rangeStart -1
    int num = ((int) (randNum * rangeEnd * 100)) % mod;

    // num加rangeStart之后,值域是0到rangeEnd - 1
    num += rangeStart;

    if (num <= rangeStart) {
    
    
        num = rangeStart + 1;
    }
    // 根据数据分析,这个条件不会满足,只是为了做最后的防护
    if (num >= rangeEnd) {
    
    
        num = rangeEnd - 1;
    }
    System.out.println("这次的随机数是:" + num);
}

从标准输出读取字符串和整数

新功能

  • Scanner in = new Scanner(System.in) 连接标准输入,在我们例子里也就是命令行。in 也是变量,只是不是基本类型。
  • in.nextLine() 可以从命令行读取一行字符串
  • in.nextInt() 可以从命令行读取一个正整数
  • 点操作符也是 Java 中的操作符,和 System.out.printIn() 以及 Math.random() 中的点是一样的操作符。是对点前面的 “变量” 进行点后面的 “操作” 。这里所谓的操作,就是指方法,也就是我们一直写的 main 方法的那个方法。这些操作都是使用一个个的的方法。使用方法我们叫做调用方法(invoke a method)。方法是 Java 中的重中之重,我们后面会用大篇幅讲解。
  • import java.util.Scanner; 是告诉程序,Scaner 这个类型在哪里。
  • 创建 Scanner 类型的 “变量”,它就是我们提过的工具,可以帮我们从标准收入读取数据
  • nextLine()nextInt() 两个方法可以从命令行读取一行字符串或者一行字符串代表的整数
import java.util.Scanner;

public class ReadStringAndIntFromConsole {
    
    
    public static void main(String[] args) {
    
    
        Scanner in = new Scanner(System.in);

        System.out.println("请问你的名字是?");

        String str = in.nextLine();

        System.out.println(str + ",你好。");

        System.out.println("请问你几岁了?");

        int age = in.nextInt();

        System.out.println("好的," + str + age + "岁了。");

    }
}

猜数字的游戏

善假于物也

Random 方法和 readInt 方法是两个工具,可以完成一个明确具体的功能。

游戏功能

  • 猜数字:生成一个指定范围内的随机正整数,从命令行读取一个整数,如果和随机数相同,就算猜中。
  • 固定随机数的范围。
  • 支持每次猜数字游戏的猜测次数,在指定次数内没猜对,则猜数字失败,否则就是成功。
  • 可以支持退出游戏。
  • 输出剩余的猜测次数。
  • 每次猜测后,如果未猜中,则提示本次猜测的数字比目标数字大还是小。
  • 游戏结束后,输出猜数字游戏的统计。
  • 没有猜中,要输出这次的目标数字。
  • 可以设置随机数的范围,可以设置最大猜测次数。
import java.util.Scanner;

public class GuessNumber {
    
    
    public static void main(String[] args) {
    
    
        // 创建Scanner从控制台读取输入
        Scanner in = new Scanner(System.in);

        // 游戏设置
        int rangeStart = 1;
        int rangeEnd = 8;
        int guessTotal = 5;

        // 游戏统计
        int totalGameCount = 0;
        int totalCorrectCount = 0;

        // 是否结束游戏
        boolean stopGame = false;

        while (!stopGame) {
    
    
            // 初始化本次游戏的变量
            int guessLeft = guessTotal;
            int mod = rangeEnd - rangeStart;
            double randNum = Math.random();
            int num = ((int) (randNum * rangeEnd * 100)) % mod;
            num += rangeStart;
            if (num <= rangeStart) {
    
    
                num = rangeStart + 1;
            }
            if (num >= rangeEnd) {
    
    
                num = rangeEnd - 1;
            }

            System.out.println("=================== 猜 数 字 ===================");
            System.out.println("目标数已经生成,数字在" + rangeStart + "到" + rangeEnd + "之间," +
                    "不包括这两个数。共有" + guessTotal + "次猜测的机会。输入-1随时结束游戏。");

            // 本次游戏是否开始了
            boolean gameStart = true;
            // 本次是否猜中数字
            boolean guessCorrect = false;
            while (guessLeft > 0) {
    
    
                System.out.println("还有" + guessLeft + "次机会,请输入猜测的数字,回车确认");
                int guessNum = in.nextInt();
                // 输入-1,结束游戏
                if (guessNum == -1) {
    
    
                    stopGame = true;
                    break;
                }

                if (guessNum <= rangeStart || guessNum >= rangeEnd) {
    
    
                    System.out.println("请输入在" + rangeStart + "到" + rangeEnd + "之间,的数字,不包括这两个数。");
                    continue;
                }
                // 只要至少猜过一次,就算玩过了。
                if (gameStart) {
    
    
                    totalGameCount++;
                    gameStart = false;
                }
                // 可以用的猜测次数减1
                guessLeft--;
                if (guessNum == num) {
    
    
                    totalCorrectCount++;
                    guessCorrect = true;
                    System.out.println("恭喜你猜对了!这次的数字就是" + num +
                            "。本次你共猜了" + (guessTotal - guessLeft) + "次。");
                    break;
                } else if (guessNum > num) {
    
    
                    System.out.println("猜测的数字比目标数字大。");
                } else {
    
    
                    System.out.println("猜测的数字比目标数字小。");
                }
            }

            if (!guessCorrect) {
    
    
                System.out.println("本次的目标数字是" + num + "。这次没有猜中。");
            }
        }

        System.out.println("共进行了" + totalGameCount + "次游戏,其中正确的为" + totalCorrectCount + "次");
    }
}

猜你喜欢

转载自blog.csdn.net/Kevinblant/article/details/119721011