【问题标题】:Generating Random Number method生成随机数方法
【发布时间】:2013-03-26 23:22:24
【问题描述】:

我需要帮助编写一个方法,该方法将返回一个不重复的随机 4 位数字。我不允许以任何方式使用字符串...

这就是我到目前为止所拥有的以及运行的线路。涉及,我得到一个错误:运行无法解决

public static int generateSecretNumber() {
    Random r = new Random();
    int x = r.nextInt(1000);;    
    x = x + 1000;  
    return x;

【问题讨论】:

  • 不重复我的意思是 4 个不同的数字,即:1234 而不是 1233 等。
  • 当您可以写“我收到此错误:ran cannot be resolved”时,切勿写“我收到错误”。
  • ty,仍然有同样的问题,另外,我如何使它成为 4 个不同的数字??

标签: java methods random generator


【解决方案1】:

行:

int x = + ran.nextInt(1000);

应该阅读

int x = r.nextInt(1000);

另一件事 - 你说你想生成一个不重复的随机 4 位数字。 这可能需要一段时间,因为随机数生成器多次返回相同的数字是完全可以的,就像您掷硬币时可以连续获得 4 个正面一样。

【讨论】:

    【解决方案2】:

    您可以生成 4 个独立的数字。

    1) 生成 1 到 9 之间的数字 A

    2) 生成 0 到 9 之间且不同于 A 的数字 B

    3) 生成介于 0 和 9 之间且不同于 A 和 B 的数字 C

    4) 生成 0 到 9 之间且不同于 A、B 和 C 的数字 D

    现在你的号码是 ABCD 或

    1000*A + 100*B + 10*C + D
    

    完整代码:

    public static int generateSecretNumber() {
        Random ran = new Random();
        int a, b, c, d;
    
        a = ran.nextInt(9) + 1; //1-9
    
        do {
            b = ran.nextInt(10); //0-9
        } while(b==a);
    
        do {
            c = ran.nextInt(10); //0-9
        } while(c==a || c==b);
    
        do {
            d = ran.nextInt(10); //0-9
        } while(d==c || d==b || d==a);
    
        return 1000*a + 100*b + 10*c + d;
    }
    

    【讨论】:

    • 我仍然“无法解决”问题,我如何才能使生成的数字完全不同?
    • 这会被视为使用字符串吗?如果没有,我如何将它实现到我的方法中,以便我以后可以调用它?
    • 您可以通过 (number+"") 将数字转换为字符串 - 只需添加空字符串
    • 我根本不允许使用任何字符串
    • 好吧,这根本不使用任何字符串。我会用标题编写整个方法并为您返回。
    【解决方案3】:

    生成 0 到 9 之间的 4 个随机数字(nextInt 的参数:10)。跟踪所有 4 位数字。如果其中任何一个相同,则生成另一个随机数字。然后使用数字构造您的最终数字。

    此外,如果您要声明 Random 变量 r,则使用 r.nextInt(10) 而不是 ran.nextInt(10)

    【讨论】:

      【解决方案4】:

      对于具有不同数字的 4 位随机数,您可以随机播放一个集合。

      List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 0);
      do{
          Collections.shuffle(numbers);
      } while (0 == numbers.get(0));
      
      System.out.println(numbers.subList(0, 4));
      

      【讨论】:

      • 这是一个非常独特的想法,我喜欢它。如果您需要一个超过 10 位的数字,它就行不通,但是,我想使用 32 位整数也是如此。 +1 创意
      【解决方案5】:

      您可以通过多种不同的方式来获得不同的数字。我建议如下:

      public static int generateSecretNumber(int digitLength) {
          Random ran = new Random();
          int randDigit[digitLength];
          int finalNum = 0;
          for(int i = 0; i < digitLength; i++){
              randDigit[i] = ran.nextInt(10);
              int j = 0;
              while(j < i){
                  if(randDigit[j] == randDigit[i]){
                      randDigit[i] = ran.nextInt(10);
                      j = 0;
                      continue;
                  }
                  j++;
              }
      
          }
      
          for(int i = 0; i < digitLength; i++){
              finalNum = finalNum + (randDigit[i] * Math.pow(10, i));
          }
      
          return finalNum;
      }
      

      【讨论】:

      • 我得到 randDigit 的“无法解析为变量”。我该如何解决这个问题??
      • 对不起,我在数组的声明中有错字。现在将编辑原始文件,但数组声明“int randDigits[digitLength];”应该是“int randDigit[digitLength];”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-26
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2018-06-27
      • 2017-10-25
      相关资源
      最近更新 更多