Java用随机数制作半随机数组

时间:2014-08-31 09:22:36

标签: java arrays random numbers

我一直在努力让这个工作。我想将1和2添加到从1-7随机生成的数字中并将其存储在数组中,例如:如果随机数生成器得到3,我希望数组存储3,4和5.这是我的代码:

    byte[] locationGen = new byte[1];
    for(byte i = 0; i < locationGen.length; i++) {
        locationGen[i] = (byte)(Math.random()*7+1);
    }
    byte[] locations = new byte[3];
    locations = (locationGen, locationGen+1, LocationGen+2);

除了位置变量之外,一切都按预期工作,我不知道如何处理它。

5 个答案:

答案 0 :(得分:1)

在Java中使用{}而不是()初始化数组。

您的初始循环毫无意义,因为您的数组中只有一个位置。你可以这样做:

byte locationGen = (byte)(Math.random()*7+1);
byte[] locations = {locationGen, (byte)(locationGen+1), (byte)(locationGen+2)};

那里需要注意的事项:

  1. 在这两种情况下,我都离开了3声明。这是不必要的,如果您更改初始化,则会成为维护问题。

  2. 我在第三个条目上修改了拼写错误(你的LocationGen有一个大写L - Java区分大小写。)

  3. 因为向int添加12byte)的结果是int,您需要退回

答案 1 :(得分:0)

我会这样做,除非你有正当理由创建一个位置字节数组来存储你的随机locationGen字节:

byte locationGen = (byte) (Math.random()*7+1);

byte[] locations = new byte[]{locationGen,  (byte) (locationGen+1), 
(byte)(locationGen+2)};

在你发布的解决方案中,你得到一个错误,因为在得到总和之前你没有访问locationGen数组位置(locationGen [0]),这可能就是你出错的原因。

答案 2 :(得分:0)

我认为您没有使用byte类型的真正动机,并且使用byte会使Java代码变得不必要地复杂化。我建议采用以下解决方案:

int[] locations = new int[3];
for (int locationGen = (int)(Math.random()*7) + 1, i = 0; i < locations.length; i++)
  locations[i] = locationGen + i;

如果在某些时候你确实需要byte,那么在最后一刻转换为它。

答案 3 :(得分:-1)

byte locationGen = (byte)(Math.random()*7+1);
byte[] locations = {locationGen[0], (byte)(locationGen[0]+1), (byte)(locationGen[0]+2)};
System.out.println(locations[0] + ":" + locations[1] + ":" +locations[2]);

你的循环没有多大意义,所以我放弃了它。 Arrayinits用“{”和“}”完成,而不是“(”和“)”。最后但并非最不重要的是,当您尝试初始化数组“locations”时,有一些索引丢失。

答案 4 :(得分:-1)

我猜你是从Python这样的东西来的。在Java中,括号()仅用于操作顺序,而不是列表,元组或其他任何内容。此外,一般表达式中的逗号运算符是“返回列表中的最后一项”类型的运算符。最好用一个例子来解释:

int i = 1,2,3,4; // same as int i = (1,2,3,4);
System.out.println(i); // prints 4

所以你的代码需要成为一种东西(不确定Java最近是否已经改变以允许分配这样的数组):

byte[] locationGen = new byte[1];
for(byte i = 0; i < locationGen.length; i++) {
    locationGen[i] = (byte)(Math.random()*7+1);
}
byte[] locations = {locationGen[0], locationGen[0]+1, LocationGen[0]+2};

另外,如果你想合并三个数组,你必须用另一个循环来做这个:

byte[] locationGen = new byte[1];
for(byte i = 0; i < locationGen.length; i++) {
    locationGen[i] = (byte)(Math.random()*7+1);
}
byte[] locations = new byte[locationGen.length*3];
for(int i = 0; i < locationGen.length; ++i) {
    locations[i] = locationGen[i];
    locations[i+locationGen.length] = locationGen[i] + 1;
    locations[i+2*locationGen.length] = locationGen[i] + 2;
}

另外,作为对代码的一个小注释,我没有看到在for循环中使用字节作为计数器的充分理由。所有Java数组都由int索引,并且使用一个字节可能无法保存任何内容。无论如何,堆栈变量(本地)往往占用至少int的空间,因此您不会节省空间,并且作为严格字节对其进行操作可能会浪费处理器时间。只需使用int