[英]Java making a semi-random array out of a random number
我一直在努力使這個工作。 我想將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);
一切都按預期工作,不過locations變量除外,我不知道該怎么辦。
在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
,所以您需要回退。
我會這樣做,除非您有充分的理由創建一個位置字節數組來存儲您的隨機locationGen
字節:
byte locationGen = (byte) (Math.random()*7+1);
byte[] locations = new byte[]{locationGen, (byte) (locationGen+1),
(byte)(locationGen+2)};
在您發布的解決方案中,您遇到了錯誤,因為在求和之前未訪問locationGen數組位置(locationGen [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
,則在最后一刻將其轉換為該byte
。
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使用“ {”和“}”而不是“(”和“)”完成。 最后但並非最不重要的一點是,當您嘗試初始化數組“位置”時缺少一些索引。
我猜您是從Python等其他方面來學習Java的。 在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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.