• 33-Java循环综合练习:逢7过、求平方根...


    一、案例:逢7过

    • 朋友聚会的时候可能会玩一个游戏:逢7过

    • 游戏规则:从任意一个数字开始报数,当你要报的数字是包含 7 或者 是7的倍数时都要说过:过

    • 需求: 使用程序在控制台打印出 1-100 之间的满足逢7必过规则的数据

    • 分析:

      • 条件:包含7(个位是7、十位是7),7的倍数

      • 举例寻找思路:

        1开始数:1 2 3 4 5 6(1) 8 9 10 11 12 13(2) 15 16(3) 18 19 20(4) ...
        // (1)第一个过:是7,不能喊7,喊过
        // (2)第二个过:是14,7的2倍,不能喊14,喊过
        // (3)第三个过:是17,个位包含7,不能喊17,喊过
        // (4)第四个过:是21,7的3倍,不能喊21,喊过
            
        数到6969 过 过 过 过...
        // 这些过:十位数包含7,所以不能直接喊出来,必须喊过
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
      • 程序实现思路:

        1. 得到 1-100 之间的每一个数字
        2. 判断这 1-100 之间的 每一个数字,如果符合规则,就打印输出过,如果不符合规则就打印真实的数字
        package com.app.test;
        
        public class LoopTest1 {
            public static void main(String[] args) {
                /*
                    - 朋友聚会的时候可能会玩一个游戏:逢7过
                    - 游戏规则:从任意一个数字开始报数,当你要报的数字是包含 7 或者 是7的倍数时都要说过:过
                    - 需求:使用程序在控制台打印出 1-100 之间的满足逢7必过规则的数据
                    - 分析:
                      - 条件:包含7(个位是7、十位是7),7的倍数
                      - 游戏规则举例说明:
                        从1开始数:1 2 3 4 5 6 过(1) 8 9 10 11 12 13 过(2) 15 16 过(3) 18 19 20 过(4) ...
                            (1)第一个过:是7,不能喊7,喊过
                            (2)第二个过:是14,7的2倍,不能喊14,喊过
                            (3)第三个过:是17,个位包含7,不能喊17,喊过
                            (4)第四个过:是21,7的3倍,不能喊21,喊过
                        数到69:69 过 过 过 过...
                            这些过:十位数包含7,所以不能直接喊出来,必须喊过
                    - 程序实现思路:
                        1.得到 1-100 之间的每一个数字
                        2.判断每一数字,如果符合规则,就打印输出:过;如果不符合,就打印输出真实数字
                 */
        
                // 1.得到 1-100 之间的每一个数字
                // for循环得到 1-100 之间的每一个数字
                for (int i = 1; i <= 100; i++) {
                    // 2.判断每一数字,如果符合规则,就打印输出:过;如果不符合,就打印输出真实数字
                    // 在循环内,对每一个数字进行判断:
                    // 第一个条件:判断个位是否为:7——>i/10 余 7
                    // 第二个条件:判断十位是否为:7——>假如i = 70, 70/10=7, 7%10 等价于 7/10=0.7 余数为 7
                    // 第三个条件:判断这个数是否为:7的倍数——>也就是这个数除以7后余数是否为0,为0就是过;比如:14%7 等价于                          14/7=2 余数为0
                    if (i % 10 == 7 || i / 10 % 10 == 7 || i % 7 == 0) {
                        // 是,符合规则,就打印输出
                        System.out.print("过\t");
                        // 跳出当前循环的当次执行,进入下一次循环
                        continue;
                    }
                    // 否,不符合,就打印输出真实数字
                    System.out.print(i + "\t");
                }
            }
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21
        • 22
        • 23
        • 24
        • 25
        • 26
        • 27
        • 28
        • 29
        • 30
        • 31
        • 32
        • 33
        • 34
        • 35
        • 36
        • 37
        • 38
        • 39
        • 40
        • 41
        • 42
        输出结果:
        
        1	2	3	4	5	6	过	8	9	10	11	12	13	过	15	16	过	18	19	20	过	22	23	24	25	26	过	过	29	30	31	32	33	34	过	36	过	38	39	40	41	过	43	44	45	46	过	48	过	50	51	52	53	54	55	过	过	58	59	60	61	62	过	64	65	66	过	68	69	过	过	过	过	过	过	过	过	过	过	80	81	82	83	过	85	86	过	88	89	90	过	92	93	94	95	96	过	过	99	100	
        
        • 1
        • 2
        • 3

    二、案例:求平方根

    • 需求: 键盘录入一个大于等于2的整数 x,计算并返回 x 的平方根。

    • 结果只保留整数部分,小数部分将被舍去。

    • 分析:

      • 平方根:就是数学里的开根号

      • 举例找思路:

        16的平方根:4
        4的平方根:2
        
        1.比如:10的平方根是多少?
        从1开始算:
        	1 * 1 = 1 < 10
            2 * 2 = 4 < 10
            3 * 3 = 9 < 10
            4 * 4 = 16 > 10
            推断:10的平方根是:3~4之间,只保留整数部分,舍去小数部分得:3
        
        2.比如:20的平方根是多少?
        	1*1 = 1 < 20
            2*2 = 4 < 20
            3*3 = 9 < 20
            4*4 = 16 < 20
            5*5 = 25 > 20
            推断:20的平方根是:4~5之间,只保留整数部分,舍去小数部分得:4
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
      • 程序实现思路:

        1. 先创建一个键盘录入Scanner对象类——>用于录入一个大于等于2的整数。

        2. 定义一个死循环,用于当录入的整数不符合要求时,不需要中断程序执行,只需要对该录入的整数进行判断;

        3. 在死循环内,提示:录入整数,并定义一个变量来接收这个录入的整数。

        4. 在录入整数后,定义一个if判断:如果该整数>=2,则继续对这个整数进行计算判断;

          如果该整数小于2,则提示:数据错误! 重新录入一个整数,直到该整数>=2,才会继续计算判断该整数。

        5. 定义一个循环,循环条件是 i 小于等于 录入的这个整数,然后让 i 自增。

        6. 定义一个if判断,如果符合平方根条件,将输出这个整数的平方根,并结束死循环;否则继续循环判断后面的数字,直到符合条件才会结束程序:

          (1) 条件1: 如果该整数的计算结果 == 录入的整数,将输出这个整数的平方根,并结束死循环;

          (2) 条件2: 如果该整数的计算结果 > 录入的整数,将输出这个整数的平方根,并结束死循环;

          (3) 条件3: 条件3: 如果该整数的计算结果 < 录入的整数,将继续循环判断后面的数字,直到符合条件才会结束程序执行。

        package com.app.test;
        
        import java.util.Scanner;
        
        public class LoopTest2 {
            public static void main(String[] args) {
                /*
                    案例:求平方根
                    - 需求:键盘录入一个大于等于2的整数 x,计算并返回 x 的平方根。
                    - 结果只保留整数部分,小数部分将被舍去。
                    - 分析:
                      - 平方根:就是数学里的开根号
                      - 举例找思路:
                        16的平方根:4
                        4的平方根:2
        
                        1.比如:10的平方根是多少?
                        从1开始算:
                            1 * 1 = 1 < 10
                            2 * 2 = 4 < 10
                            3 * 3 = 9 < 10
                            4 * 4 = 16 > 10
                            推断:10的平方根是:3~4之间,只保留整数部分,舍去小数部分得:3
        
                        2.比如:20的平方根是多少?
                            1*1 = 1 < 20
                            2*2 = 4 < 20
                            3*3 = 9 < 20
                            4*4 = 16 < 20
                            5*5 = 25 > 20
                            推断:20的平方根是:4~5之间,只保留整数部分,舍去小数部分得:4
                 */
        
                // 1.创建一个键盘录入Scanner对象类——>用于录入一个大于等于2的整数
                Scanner sc = new Scanner(System.in);
        
                OUT:    // OUT: 用于最后结束死循环
                // 2.定义一个死循环,提示:录入整数,并定义一个变量来接收这个录入的整数。
                while (true) {
                    // 3.在死循环内,提示:录入整数,并定义一个变量来接收这个录入的整数
                    System.out.println("请输入一个整数(该数>=2): ");
                    int number = sc.nextInt();
        
                    // 4.在录入整数后,定义一个if判断:如果该整数>=2,则继续对这个整数进行计算判断;
                    if (number >= 2) {
                        // 5. 定义一个循环,循环条件是 i 小于等于 录入的整数,然后让 i 自增
                        for (int i = 1; i <= number; i++) {
                            // 6. 定义一个if判断,如果符合平方根条件,将输出这个整数的平方根,并结束死循环;否则继续循环判断					      后面的数字,直到符合条件才会结束程序:
                            // 条件1: 如果该整数的计算结果 == 录入的整数,将输出这个整数的平方根,并结束死循环;
                            // 条件2: 如果该整数的计算结果 > 录入的整数,将输出这个整数的平方根,并结束死循环;
                            // 条件3: 如果该整数的计算结果 < 录入的整数,将继续循环判断后面的数字,直到符合条件才会结束程序         				      执行。
                            if (i*i == number) {
                                System.out.println("整数" + number + "的平方根是:" + i);
                                // 结束死循环
                                break OUT;  // break OUT: 用于结束整个死循环
        
                            }else if (i*i > number){
                                // i-1表示: 结果只保留整数部分,小数部分将被舍去
                                System.out.println("整数" + number + "的平方根是:" + (i-1));
                                break OUT;
        
                            }
                        }
                    }
                    // 如果该整数小于2,则提示:数据错误! 重新录入一个整数,直到该整数>=2,才会继续计算判断该整数
                    System.out.println("录入数据错误!");
                }
            }
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21
        • 22
        • 23
        • 24
        • 25
        • 26
        • 27
        • 28
        • 29
        • 30
        • 31
        • 32
        • 33
        • 34
        • 35
        • 36
        • 37
        • 38
        • 39
        • 40
        • 41
        • 42
        • 43
        • 44
        • 45
        • 46
        • 47
        • 48
        • 49
        • 50
        • 51
        • 52
        • 53
        • 54
        • 55
        • 56
        • 57
        • 58
        • 59
        • 60
        • 61
        • 62
        • 63
        • 64
        • 65
        • 66
        • 67
        • 68
        • 69
        输出结果(便于读者理解,代码中不存在该输出语句):
        -------------------------------------------------
        测试1(方便读者理解,代码中不存在该输出语句):
        请输入一个整数(该数>=2): 
        0
        录入数据错误!
        请输入一个整数(该数>=2): 
        1
        录入数据错误!
        请输入一个整数(该数>=2): 
        10
        整数10的平方根是:3
        
        -------------------------------------------------
        测试2(方便读者理解,代码中不存在该输出语句):
        请输入一个整数(该数>=2): 
        20
        整数20的平方根是:4
        
        -------------------------------------------------
        测试3(方便读者理解,代码中不存在该输出语句):
        请输入一个整数(该数>=2): 
        16
        整数16的平方根是:4
        
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21
        • 22
        • 23
        • 24
        • 25

    三、案例:求质数

    • 需求: 键盘录入一个正整数,判断该整数是否为一个质数

    • 分析:

      • 质数:就是除了 1 和 它本身 之外,再也没有整数能被它整除的数

      • 举例寻找思路:

        7 = 1*7 // 质数
        8 = 1*8, 2*4  // 不是质数,是合数
        9 = 1*9, 3*3  // 不是质数,是合数
        
        • 1
        • 2
        • 3
      • 程序实现思路:

        1. 创建一个键盘录入Scanner对象类,用于录入一个正整数。
        2. 定义一个死循环,用于录入正整数后,做判断后可以不中断程序执行,可以继续判断。
        3. 在死循环内,开始录入,提示:开始录入一个正整数,并定义一个变量用于接收该录入的正整数。
        4. 程序员标记思想(重点) ——>随后定义一个标记,一开始就认为录入的正整数是质数。
        5. 录入正整数后,对该录入的正整数做判断,如果录入的数 > 0,将继续判断;否则,提示:否则提示:数据错误!——>将重新录入。
        6. 如果录入的数 > 0,判断:该数是否等于1,等于,提示:该数既不是质数,也不是合数。但是不结束程序的执行(提示:continue),只跳出当前循环的当次执行,进入下一次循环。
        7. 如果该数不等于1,则:定义一个循环,从2开始判断,范围是小于 录入的正整数。
        8. 在循环内,判断:看这个范围内,有没有数字可以被 录入的正整数整除的,如果有,标记为false,表示不是质数,并跳出循环,结束程序执行。
        9. 当循环结束了,表示这个范围内所有的数字都判断完毕了,此时才能判断标记,为true是质数;并跳出循环,结束程序执行。否则为false,不是质数,是合数;并跳出循环,结束程序执行。
        package com.app.test;
        
        import java.util.Scanner;
        
        public class LoopTest3 {
            public static void main(String[] args) {
                /*
                    - 需求: 键盘录入一个正整数,判断该整数是否为一个质数
                    - 分析:
                      - 质数: 就是除了 1 和 它本身 之外,再也没有整数能被它整除的数
                      - 举例寻找思路:
                        7 = 1*7 // 质数
                        8 = 1*8, 2*4  // 不是质数,是合数
                        9 = 1*9, 3*3  // 不是质数,是合数
                 */
        
                // 1. 创建一个键盘录入Scanner对象类,用于录入一个正整数
                Scanner sc = new Scanner(System.in);
        
                // 2.定义一个死循环,用于录入正整数后,做判断后可以不中断程序执行,可以继续判断。
                while (true) {
                    // 3.在死循环内,开始录入,提示:开始录入一个正整数,并定义一个变量用于接收该录入的正整数。
                    System.out.println("请您录入一个正整数(该数>=1): ");
                    int number = sc.nextInt();
        
                    // 4.程序员标记思想(重点)——>随后定义一个标记,一开始就认为录入的正整数是质数
                    boolean flag = true;
        
                    // 5.录入正整数后,对该录入的正整数做判断,如果录入的数 > 0,将继续判断;
                    if (number > 0){
                        // 6.如果录入的数 > 0,判断:该数是否等于1,
                        if (number == 1) {
                            // 等于,提示:该数既不是质数,也不是合数。但是不结束程序的执行(提示:continue),
                            System.out.println("正整数" + number + "既不是质数,也不是合数");
                            // 只跳出当前循环的当次执行,进入下一次循环。
                            continue;
                        }
        
                        // 7.如果该数不等于1,则:定义一个循环,从2开始判断,范围是小于 录入的正整数。
                        for (int i = 2; i < number; i++) {
                            // 8.在循环内,判断:看这个范围内,有没有数字可以被 录入的正整数整除的,
                            if (number % i == 0){
                                // 如果有,标记为false,表示不是质数,
                                flag = false;
                                // 并跳出循环,结束程序执行
                                break;
                            }
                        }
                        // 9.当循环结束了,表示这个范围内所有的数字都判断完毕了,此时才能判断标记,
                        if (flag) {
                            // 为true是质数;
                            System.out.println("正整数" + number + "是质数");
                            // 并跳出循环,结束程序执行
                            break;
                        }else {
                            // 否则为false,不是质数,是合数
                            System.out.println("正整数" + number + "是合数");
                            // 并跳出循环,结束程序执行
                            break;
                        }
                    }
                    // 否则提示:数据错误!——>将重新录入。
                    System.out.println("数据错误!");
                }
            }
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21
        • 22
        • 23
        • 24
        • 25
        • 26
        • 27
        • 28
        • 29
        • 30
        • 31
        • 32
        • 33
        • 34
        • 35
        • 36
        • 37
        • 38
        • 39
        • 40
        • 41
        • 42
        • 43
        • 44
        • 45
        • 46
        • 47
        • 48
        • 49
        • 50
        • 51
        • 52
        • 53
        • 54
        • 55
        • 56
        • 57
        • 58
        • 59
        • 60
        • 61
        • 62
        • 63
        • 64
        • 65
        • 66
        输出结果(便于读者理解,代码中不存在该输出语句):
        ------------------------------------------
        
        测试1(便于读者理解,代码中不存在该输出语句):
        请您录入一个正整数(该数>=1): 
        0
        数据错误!
        请您录入一个正整数(该数>=1): 
        -100
        数据错误!
        请您录入一个正整数(该数>=1): 
        1
        正整数1既不是质数,也不是合数
        请您录入一个正整数(该数>=1): 
        2
        正整数2是质数
        ------------------------------------------
        
        测试2(便于读者理解,代码中不存在该输出语句):
        请您录入一个正整数(该数>=1): 
        7
        正整数7是质数
        ------------------------------------------
        
        测试3(便于读者理解,代码中不存在该输出语句):
        请您录入一个正整数(该数>=1): 
        9
        正整数9是合数
        ------------------------------------------
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21
        • 22
        • 23
        • 24
        • 25
        • 26
        • 27
        • 28
        • 29

    简化思路

    • 只需要明白这样简化代码的思路即可,无需写出代码,无需执行,因为往后的知识,会讲解到如何直接获取到一个数的平方根
    package com.app.test;
    
    public class LoopTest4 {
        public static void main(String[] args) {
            // 简化思路:
            // 例如:求 100000 是不是质数
            // 如果还是用之前的求质数的代码来验证的话,循环次数:将近10万次
    
            // 如果用简化的思路
            // 例如:81,不是质数,因为:
            // 1 * 81, 3 * 27, 9 * 9
            /*
                那么以81的平方根9,为中心
                而且假设 a*b = 81
                那么a 和 b 中,其中有一个必定是小于等于9,另一个必定是大于等于9
                为什么?
                    假设,都是大于9 --- 9.1 * 9.1 必定 > 81
                    假设,都是小于9 --- 8.9 * 8.9 必定 < 81
                结论:
                    其中一个数字必定是小于等于平方根
                    其中一个数字必定是大于等于平方根
             */
            // 所以,100000 的平方根 用计算器算出是:316
            int number = 100000;
            /*
                如果这个范围内,所有数字都不能被number整除
                那么number就一定是质数
                i 小于 number的平方根,因此,只需要循环 316次,代码得到了进一步的简化
             */
            /*for (int i = 2; i < number的平方根; i++) {
    
            }*/
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    四、案例:猜数字小游戏

    • 需求: 程序自动生成一个 1~100 之间的随机数字,使用程序实现猜出这个数字是多少?

    • 分析:

      1. 获取随机数:Java帮我们写好了一个类叫做Random,这个类可以生成一个随机数。

        (1) 导入Random包——>Random这个类在哪里

        // 导包的操作必须出现在类定义的上边
        import java.util.Random;
        
        • 1
        • 2

        (2) 创建Random对象——>表示我们要开始使用这个类了

        // 这个格式,只有rd是变量名,可以变,其他的不允许乱改
        Random rd = new Random();
        
        • 1
        • 2

        (3) 定义变量接收生成的随机数——>开始干活了

        // 这个格式,只有number是变量名,可以变,其他的不允许乱改
        int number = rd.nextInt(随机数范围);
        
        • 1
        • 2
      2. 做完以上操作后,输出这个随机数即可

      package com.app.test;
      
      // 1.导入Random包
      import java.util.Random;
      
      public class LoopTest5 {
          public static void main(String[] args) {
              /*
                  此程序告诉你,如何生成任意数到任意数之间的随机数
               */
      
              // 2.创建Random随机数对象
              Random rd = new Random();
      
              // 减加法秘诀:
              // 用来生成任意数到任意数之间的随机数:比如7~15之间的随机数
              // 1.让这个范围的头尾部都减去 头部的值,让这个范围从0开始:7~15都减头部值后得——>0~8
              // 2.再让尾部+1——>8+1=9
              // 3.最终的结果,再加上第一步减去的值
              // int number = rd.nextInt(9) + 7;  // 表示生成7~15之间的随机数
              
              // 3.为了方便判断有没有生成1-100之间的随机数,定义个循环来扩大生成范围
              for (int i = 0; i < 120; i++) {
                  // 4.调用随机数功能,随机生成一个1-100之间的随机数
                      int number = rd.nextInt(100) + 1;
                  // 也可写成
      //            int number = rd.nextInt(1, 101);
                  System.out.println(number);
              }
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      输出结果:
      
      37
      27
      79
      96
      1
      89
      46
      48
      69
      54
      42
      64
      49
      12
      84
      88
      35
      75
      58
      82
      28
      31
      64
      25
      94
      75
      20
      28
      20
      27
      37
      88
      81
      18
      68
      42
      75
      93
      90
      100
      72
      49
      27
      26
      65
      55
      31
      37
      59
      35
      38
      16
      7
      78
      46
      71
      49
      90
      85
      9
      20
      57
      11
      13
      62
      32
      45
      57
      83
      58
      47
      96
      29
      16
      57
      35
      79
      69
      48
      67
      10
      88
      45
      5
      93
      30
      35
      86
      5
      86
      30
      74
      25
      31
      40
      5
      81
      78
      63
      61
      38
      17
      54
      79
      45
      31
      53
      5
      40
      5
      80
      13
      38
      87
      3
      73
      68
      85
      72
      95
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44
      • 45
      • 46
      • 47
      • 48
      • 49
      • 50
      • 51
      • 52
      • 53
      • 54
      • 55
      • 56
      • 57
      • 58
      • 59
      • 60
      • 61
      • 62
      • 63
      • 64
      • 65
      • 66
      • 67
      • 68
      • 69
      • 70
      • 71
      • 72
      • 73
      • 74
      • 75
      • 76
      • 77
      • 78
      • 79
      • 80
      • 81
      • 82
      • 83
      • 84
      • 85
      • 86
      • 87
      • 88
      • 89
      • 90
      • 91
      • 92
      • 93
      • 94
      • 95
      • 96
      • 97
      • 98
      • 99
      • 100
      • 101
      • 102
      • 103
      • 104
      • 105
      • 106
      • 107
      • 108
      • 109
      • 110
      • 111
      • 112
      • 113
      • 114
      • 115
      • 116
      • 117
      • 118
      • 119
      • 120
      • 121
      • 122
    • 如果你想要1-100之间,不要100本身这个随机数,那就不用+1,如果你想要100这个随机数,就必须用减加法来取尾数,如果不记得减加法,就看看之前的随机数文章,有说过细节!

    • 实现猜数字小游戏

      1. 创建随机数Random对象

      2. 调用随机数功能,生成一个1-100之间的随机数,作为中奖号码

      3. 猜这个数据是多少?

        (3-1) 定义个死循环,让大家不断猜数,猜中才会跳出循环,结束游戏

        (3-2) 在循环外,创建一个键盘录入Scanner对象,用于录入大家猜的数字

        (3-3) 调用键盘录入功能,开始录入,用变量接收大家猜的数字

        (3-4) 定义if判断:

        ​ 如果猜的数字 小于等于0 或者 大于100 ,则提示:”数据错误!“,重新猜数,猜中为止;

        ​ 如果猜的数据 符合 1-100 范围内,则继续判断:

        ​ 假如大家猜的数 等于 中奖数,则提示:“猜中了~恭喜!”,并跳出循环,结束程序;

        ​ 假如大家猜的数 大于 中奖数,则提示:“数大了!继续~”;

        ​ 假如大家猜的数 小于 中奖数,则提示:“数小了!继续~”。

    package com.app.test;
    
    import java.util.Random;
    import java.util.Scanner;
    
    public class LoopTest6 {
        public static void main(String[] args) {
            /*
                案例:猜数字小游戏
                - 需求:程序自动生成一个 1~100 之间的随机数字,使用程序实现猜出这个数字是多少?
             */
             
            // 1.创建随机数对象
            Random rd = new Random();
    
            // 2.调用随机数功能,生成1-100之间的随机数
            int number = rd.nextInt(100) + 1;
    
            // 3.猜这个随机数字是多少?
            // (3-2) 在循环外创建键盘录入对象,用于输入你要猜的数字
            Scanner sc = new Scanner(System.in);
    
            // (3-1) 定义个死循环,让你不断猜数,猜中才会跳出循环,结束游戏
            while (true) {
                // (3-3) 调用键盘录入功能,开始录入,并用变量接收你猜的数字
                System.out.println("请您猜个数(1-100): ");
                int guessNumber = sc.nextInt();
    
                // (3-4) if判断你输入的数字
                if (guessNumber <= 0 || guessNumber > 100) {
                    // 假如输入的数小于等于0 或者 大于100,提示:错误猜数!
                    System.out.println("数据错误!");
    
                }else {
                    // (3-5) if判断你要猜的数字:
                    if (guessNumber == number) {    // 假如等于答案的数字,提示:猜中了~恭喜!
                        System.out.println("猜中了~恭喜!");
                        // 并跳出循环,结束程序
                        break;
    
                    }else if (guessNumber > number){     // 假如比答案大了,提示:数大了!继续~
                        System.out.println("数大了!继续~");
    
                    }else {     // 假如比答案小了,提示:数小了!继续~
                        System.out.println("数小了!继续~");
                    }
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    输出结果:
    
    请您猜个数(1-100): 
    0
    数据错误!
    请您猜个数(1-100): 
    101
    数据错误!
    请您猜个数(1-100): 
    100
    数大了!继续~
    请您猜个数(1-100): 
    50
    数小了!继续~
    请您猜个数(1-100): 
    60
    数小了!继续~
    请您猜个数(1-100): 
    70
    数大了!继续~
    请您猜个数(1-100): 
    65
    数大了!继续~
    请您猜个数(1-100): 
    64
    猜中了~恭喜!
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    五、案例:抽奖保底机制

    • 需求: 假设游戏场景:用点券抽水晶,保底次数是:3次。抽奖过程中,如果玩家抽奖3次猜不中,直接提示:“恭喜玩家~抽中1枚荣耀水晶!”。

    • 分析:

      1. 创建随机数Random对象,用于生成一个1-20之间的随机数

      2. 调用随机数功能, 生成一个1-20之间的随机数,作为抽中奖励

      3. 定义一个死循环,让玩家不断抽奖,直到抽中才会跳出循环,结束抽奖

      4. 在死循环外,定义一个计数器变量,用于记录玩家抽奖次数

      5. 在死循环外,创建键盘录入Scanner对象,用于给玩家抽奖

      6. 在死循环内,开始抽奖,用变量接收玩家的抽奖号码

      7. 玩家每一次抽奖后,累加抽奖次数,判断:当玩家的未抽中次数达到3次时,直接提示:“恭喜玩家~抽中1枚荣耀水晶!”,并跳出循环,结束抽奖。

      8. 判断:如果玩家直接抽中,提示:“恭喜玩家~抽中1枚荣耀水晶!”,并跳出循环,结束抽奖;

        ​ 如果玩家没有抽中,提示:“可惜了~ 继续加油~”,累加玩家抽奖次数;

    package com.app.test;
    
    import java.util.Random;
    import java.util.Scanner;
    
    public class LoopTest7 {
        public static void main(String[] args) {
            // 扩展
            /*
               案例:抽奖机制
                - 需求:假设游戏场景:用点券抽水晶,保底次数是:3次。抽奖过程中,如果玩家抽奖3次猜不中,直接提示:“恭喜玩家~抽中1枚荣耀水晶!”。
                - 分析:
                  1. 创建随机数Random对象,用于生成一个1-20之间的随机数
                  2. 调用随机数功能, 生成一个1-20之间的随机数,作为抽中奖励
                  3. 定义一个死循环,让玩家不断抽奖,直到抽中才会跳出循环,结束抽奖
                  4. 在死循环外,定义一个计数器变量,用于记录玩家抽奖次数
                  5. 在死循环外,创建键盘录入Scanner对象,用于给玩家抽奖
                  6. 在死循环内,开始抽奖,用变量接收玩家的抽奖号码
                  7. 开始判断,如果玩家直接抽中,提示:“恭喜玩家~抽中1枚荣耀水晶!”,并跳出循环,结束抽奖;
                     如果玩家没有抽中,提示:“可惜了~继续加油~”,累加玩家抽奖次数;
                     判断:当玩家的未抽中次数达到3次时,直接提示:“恭喜玩家~抽中1枚荣耀水晶!”,并跳出循环,结束抽奖。
             */
    
            // 1. 创建随机数Random对象,用于生成一个1-20之间的随机数
            Random rd = new Random();
    
            // 2. 调用随机数功能, 生成一个1-20之间的随机数,作为抽中奖励
            int number = rd.nextInt(20) + 1;
    
            // 4. 在死循环外,定义一个计数器变量,用于记录玩家抽奖次数
            int count = 0;
    
            // 5. 在死循环外,创建键盘录入Scanner对象,用于给玩家抽奖
            Scanner sc = new Scanner(System.in);
    
            // 3. 定义一个死循环,让玩家不断抽奖,直到抽中才会跳出循环,结束抽奖
            while (true) {
                // 6. 在死循环内,开始抽奖,用变量接收玩家的抽奖号码
                System.out.println("请玩家开始抽奖(1-20): ");
                int guessNumber = sc.nextInt();
    
                // 7.玩家每一次抽奖后,累加抽奖次数,
                count++;
                // 判断:当玩家的未抽中次数达到3次时,直接提示:“恭喜玩家~抽中1枚荣耀水晶!”,
                if (count == 3) {
                    System.out.println("恭喜玩家~抽中1枚荣耀水晶!");
                    // 并跳出循环,结束抽奖。
                    break;
                }
    
                // 8. 开始判断,如果玩家直接抽中,提示:“恭喜玩家~抽中1枚荣耀水晶!”,
                if (guessNumber == number) {
                    System.out.println("恭喜你~抽中1枚荣耀水晶!");
                    // 并跳出循环,结束抽奖;
                    break;
                }else if (guessNumber > number) {
                    // 如果玩家没有抽中,提示:“可惜了~继续加油~”,
                    System.out.println("可惜了~继续加油~");
                }else {
                    // 如果玩家没有抽中,提示:“可惜了~继续加油~”,
                    System.out.println("可惜了~继续加油~");
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    输出结果:
        
    请玩家开始抽奖(1-20): 
    18
    可惜了~继续加油~
    请玩家开始抽奖(1-20): 
    15
    可惜了~继续加油~
    请玩家开始抽奖(1-20): 
    10
    恭喜玩家~抽中1枚荣耀水晶!
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 可以看到,不管玩家抽中还是抽不中,只要抽奖次数达到3次,就保底给1枚荣耀水晶!

    代码不多,要明白清楚实现需求的思路,先有思路再开写,不要急,不熟练多敲!!

  • 相关阅读:
    FFmpeg入门详解之110:RTSP协议讲解
    【Java】CAP理论以及它的实际应用案例
    【Git】Gitbash使用ssh 上传本地项目到github
    二进制的形式在内存中绘制一个对象实例
    Springboot中常用工具类
    chrome账户密码管理
    java冒泡排序
    4.1-支持向量机
    [蓝牙 Mesh & Zephyr]-[004]- 基础 Model
    java判断空的方法
  • 原文地址:https://blog.csdn.net/yelitoudu/article/details/125417581