【问题标题】:Random number in array数组中的随机数
【发布时间】:2015-12-20 12:25:32
【问题描述】:
int[] integers = new int[12];
Random r = new Random();
for (int i = 0; i < integers.length; i++) {
    integers[i] = r.nextInt((10 - (-10) + 1) + (-10));
}

我正在使用online compiler 执行它,它会随机抛出一个错误。

谁能帮我解决这个问题?我不知道怎么写一半是消极的,一半是积极的。而且那个随机数不能是0

【问题讨论】:

  • 你遇到了什么错误?
  • 是编译错误吗?您需要随机导入。 import java.util.Random;
  • 我已经导入了,现在可以了。你们能帮我填充数组吗?

标签: java arrays random


【解决方案1】:

首先,要生成一个介于-10和10之间的数字,正确的代码是:

 integers[i] = r.nextInt(21)-10;

r.nextInt(21) 将生成 0 到 20 之间的数字,因此减去 10 将得到所需的范围。

现在,您必须验证您生成的随机数,以确保您不会生成太多正数或负数,并且没有零。

    int posCount=0;
    int negCount=0;
    for (int i = 0; i < integers.length; i++) {
      integers[i] = r.nextInt(21)-10;
      if (integers[i]>0) 
          posCount++;
      else if (integers[i]<0) 
          negCount--;
      if (posCount>6||negCount>6||integers[i]==0)
          i--; // redo the current iteration of the loop, since the last generated
               // number should be replaced
    }

另一种运行速度更快的替代方法是生成前 6 个正整数 (r.nextInt(10)+1),然后生成 6 个负整数 (-1-r.nextInt(10)),但我不确定生成数字的顺序是否重要(即是否可以接受所有积极因素都将出现在所有消极因素之前)。

【讨论】:

    【解决方案2】:

    1+ r.nextInt(10) 给出整数 1-10。对于负整数,只需在此计算结果中加上减号即可。称它六次为正面,六次为负面。你得到什么样的错误?

    【讨论】:

    • 这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review
    • 什么意思?它回答了在区间 [1, 10] 中生成六个数字和在 [-10, -1] 中生成六个数字的问题。
    • 您发布评论作为答案。
    • 一个问题是关于在给定范围内生成六个数字,答案是关于那个问题。
    • @karastojko:IMO,为了避免这种误解,试着用多几行来解释你的答案,这样看起来确实是一个高质量的答案。
    【解决方案3】:

    检查一下:

     Random r = new Random();
        int[] integers = new int[10];
        boolean isEven=false;
        int i = 0;
        while(true){
            int check = r.nextInt(10)*(isEven?-1:1);
            if (check != 0){
                isEven = !isEven;
                integers[i] = check;
                System.out.println(integers[i]);
                i++;
            }
            if(i == 10){
                break;
            }
        }
    

    【讨论】:

      【解决方案4】:

      保持简单:

      • 用(1到10)之间的随机数填充当前索引;
      • 用(-1到-10)的随机数填充下一个索引;

        int[] integers = new int[12];
        Random r = new Random();
        for (int i = 0; i < integers.length; i+=2) {
            integers[i] = r.nextInt(10) + 1;
            if((i+1)<integers.length){
                 integers[i+1] = r.nextInt(10) -10;
            }
        }
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-24
        • 1970-01-01
        • 1970-01-01
        • 2012-08-12
        • 2012-08-29
        • 2018-11-19
        • 2016-08-10
        相关资源
        最近更新 更多