数组中的随机数

时间:2015-12-20 12:25:32

标签: java arrays random

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

4 个答案:

答案 0 :(得分:0)

首先,要生成介于-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)),但我不确定生成的顺序是否正确数字很​​重要(也就是所有积极因素都会在所有负数之前出现)。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

检查一下:

 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;
        }
    }

答案 3 :(得分:0)

保持简单:

  • 使用(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;
        }
    }