【问题标题】:java random numbers generator which generate twenty four numbers生成二十四个数字的java随机数生成器
【发布时间】:2013-06-22 18:57:10
【问题描述】:

我想创建一个提供随机 24 位数字的程序。我尝试了不同的方法,但我不知道如何制作。一个示例响应是 392834756843456012349538,它只是一个随机的 24 位数字。

【问题讨论】:

  • 我想到的最简单的方法是生成 0 到 9 之间的 24 个数字并将它们连接起来
  • 你尝试过哪些不同的方法?
  • 24位数字还是24位数字?
  • 前导零怎么样?

标签: java random numbers generator


【解决方案1】:

此示例适用于生成“数字”长度的数字包括前导零,并且不需要任何外部 jar 文件。

private String generateInt(int digits) {
    StringBuilder str = new StringBuilder();
    Random random = new Random();
    for(int i = 0; i < digits; i++) {
        str.append(random.nextInt(10));
    }
    return str.toString();
}

一个示例响应是:

081140561664657769754888

【讨论】:

    【解决方案2】:

    请参阅How to generate a random BigInteger value in Java?,其中提供了生成不大于n 的 BigInteger 随机数的代码:

    BigInteger r;
    do {
        r = new BigInteger(n.bitLength(), rnd);
    } while (r.compareTo(n) >= 0);
    

    【讨论】:

      【解决方案3】:
      int[] randomNumbers = new int[24];
      
      for(int i = 0; i < 24; i++) {
      
          randomNumbers[i] = (int)Math.floor(Math.random() * 10);
          System.out.println(randomNumbers[i]);
      
      }
      

      为了回应下面的评论,添加了用这个随机数序列设置标签的代码:

      String randomString = "";
      
      for(int i = 0; i < 24; i++) {
      
          randomString = randomString.concat(String.valueOf((int)Math.floor(Math.random() * 10)));
      
      }
      
      NumbersLabel.setText(randomString);
      

      【讨论】:

      • 这段代码可以工作,但是当我试图改变 System.out.println(); NumbersLabel.setText(""+randomNumbers[i]);代码仍然有效,但它只在标签中显示一个数字:/
      • 这是因为您只会将标签设置为整数数组中位于 i 位置的任何数字。此要求不是您最初问题的一部分,但我将添加到上面的代码中以帮助您。
      • 对不起我的英语不好,但这仍然不起作用,只是在将文本添加到 randomString = "asd(for example)";并在文本字段中显示“asd”
      • 糟糕,犯了一个新手错误,忘记了不可变字符串。试试更新的代码。
      【解决方案4】:

      以下内容仅使用核心 java.lang 内容,似乎可以完成工作。与其他解决方案一样,结果是字符串而不是 java 数字类型,因为 none of the basic java datatypes 可以存储 23 位十进制数字。

      import java.lang.Math;
      import java.lang.StringBuilder;
      
      public class random24 {
          static char digits[] = {'0','1','2','3','4','5','6','7','8','9'};
      
          public static char randomDecimalDigit() {
              return digits[(int)Math.floor(Math.random() * 10)];
          }
      
          public static String randomDecimalString(int ndigits) {
              StringBuilder result = new StringBuilder();
              for(int i=0; i<ndigits; i++) {
                  result.append(randomDecimalDigit());
              }
              return result.toString();
          }
      
          public static void main(String[] args) {
              System.out.println(randomDecimalString(24));
          }
      }
      

      【讨论】:

      • 在线static char digits[] = {'0','1','2','3','4','5','6','7','8','9'};向我显示错误
      • 很奇怪。诚然,我在 Ubuntu 10.04 LTS 上使用旧的 jdk openjdk-6-jdk 6b20-1.9.13-0ubuntu1~10.04.1 构建,但我什至重新检查了上面剪切并粘贴到新文件的代码。
      【解决方案5】:

      这是我能想到的最简单的方法:

      @Test
      public void random24Numbers() {
          String random = RandomStringUtils.random(24, false, true);
          System.out.println(random);
      }
      

      这使用RandomStringUtils.random。第一个参数是长度,第二个参数是“无字母”。第三个说,“给我数字”。这是一个示例输出:

      564266161898194666197908

      是的,它是一个字符串,但我假设您知道如何将字符串转换为数字。

      【讨论】:

      • 这与我的回答有什么关系?我认为您将此评论放在错误的答案上。
      猜你喜欢
      • 2023-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      相关资源
      最近更新 更多