一、案例:逢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. 得到 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	过	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
      

二、案例:求平方根

  • 需求: 键盘录入一个大于等于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的整数。

      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):
      0
      录入数据错误!
      请输入一个整数(该数>=2):
      1
      录入数据错误!
      请输入一个整数(该数>=2):
      10
      整数10的平方根是:3
      
      -------------------------------------------------
      测试2(方便读者理解,代码中不存在该输出语句):
      请输入一个整数(该数>=2):
      20
      整数20的平方根是:4
      
      -------------------------------------------------
      测试3(方便读者理解,代码中不存在该输出语句):
      请输入一个整数(该数>=2):
      16
      整数16的平方根是:4
      
      

三、案例:求质数

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

  • 分析:

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

    • 举例寻找思路:

      7 = 1*7 // 质数
      8 = 1*8, 2*4  // 不是质数,是合数
      9 = 1*9, 3*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(便于读者理解,代码中不存在该输出语句):
      请您录入一个正整数(该数>=1):
      0
      数据错误!
      请您录入一个正整数(该数>=1):
      -100
      数据错误!
      请您录入一个正整数(该数>=1):
      1
      正整数1既不是质数,也不是合数
      请您录入一个正整数(该数>=1):
      2
      正整数2是质数
      ------------------------------------------
      
      测试2(便于读者理解,代码中不存在该输出语句):
      请您录入一个正整数(该数>=1):
      7
      正整数7是质数
      ------------------------------------------
      
      测试3(便于读者理解,代码中不存在该输出语句):
      请您录入一个正整数(该数>=1):
      9
      正整数9是合数
      ------------------------------------------
      

简化思路

  • 只需要明白这样简化代码的思路即可,无需写出代码,无需执行,因为往后的知识,会讲解到如何直接获取到一个数的平方根
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~100 之间的随机数字,使用程序实现猜出这个数字是多少?

  • 分析:

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

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

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

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

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

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

      // 这个格式,只有number是变量名,可以变,其他的不允许乱改
      int number = rd.nextInt(随机数范围);
      
    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);
            }
        }
    }
    
    输出结果:
    
    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-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-100):
0
数据错误!
请您猜个数(1-100):
101
数据错误!
请您猜个数(1-100):
100
数大了!继续~
请您猜个数(1-100):
50
数小了!继续~
请您猜个数(1-100):
60
数小了!继续~
请您猜个数(1-100):
70
数大了!继续~
请您猜个数(1-100):
65
数大了!继续~
请您猜个数(1-100):
64
猜中了~恭喜!


五、案例:抽奖保底机制

  • 需求: 假设游戏场景:用点券抽水晶,保底次数是: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-20):
18
可惜了~继续加油~
请玩家开始抽奖(1-20):
15
可惜了~继续加油~
请玩家开始抽奖(1-20):
10
恭喜玩家~抽中1枚荣耀水晶!

  • 可以看到,不管玩家抽中还是抽不中,只要抽奖次数达到3次,就保底给1枚荣耀水晶!

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

06-22 23:59