我一直在努力让这个工作。我想将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);
除了位置变量之外,一切都按预期工作,我不知道如何处理它。
答案 0 :(得分:1)
在Java中使用{}
而不是()
初始化数组。
您的初始循环毫无意义,因为您的数组中只有一个位置。你可以这样做:
byte locationGen = (byte)(Math.random()*7+1);
byte[] locations = {locationGen, (byte)(locationGen+1), (byte)(locationGen+2)};
那里需要注意的事项:
在这两种情况下,我都离开了3
声明。这是不必要的,如果您更改初始化,则会成为维护问题。
我在第三个条目上修改了拼写错误(你的LocationGen
有一个大写L
- Java区分大小写。)
因为向int
添加1
(2
或byte
)的结果是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
。