我創建了一個簡單的程序,用於從列表中讀取一些值並僅保留指定長度的值,並從中提取3個字符,但從不同的位置時間。「從列表中檢查值」程序中的Java堆空間錯誤
例如,如果我們有nick07n程序中的值應該從中提取三個隨機字符可能是相同的,但不是來自同一個位置拍攝:
n0n [0, 4, 6]
當程序運行正常(我」已經看到一些成果),未成功執行的整個過程,直到結束或者根本沒有執行,因爲我收到以下的內存錯誤:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Unknown Source)
at java.util.Arrays.copyOf(Unknown Source)
at java.util.ArrayList.grow(Unknown Source)
at java.util.ArrayList.ensureExplicitCapacity(Unknown Source)
at java.util.ArrayList.ensureCapacityInternal(Unknown Source)
at java.util.ArrayList.add(Unknown Source)
at guessingTool.CheckProgram.main(CheckProgram.java:103)
這裏是我的代碼至今:
for (int i = 0; i < 5; i++) {
index = randomGenerator.nextInt(valuesList.size());
value = valuesList.get(index);
finalValue = "";
positions.clear();
for (int j = 0; j < 3; j++) {
index = randomGenerator.nextInt(value.length());
valueChar = value.charAt(index);
positions.add(index);
if (j == 0) {
finalValue += Character.toString(valueChar);
}
else if (j == 1) {
if (positions.get(0) != positions.get(1)) {
finalValue += Character.toString(valueChar);
}
else {
while (positions.get(0) == positions.get(1)) {
index = randomGenerator.nextInt(value.length());
valueChar = value.charAt(index);
positions.add(index);
}
}
}
else if (j == 2) {
if (positions.get(0) != positions.get(2) && positions.get(1) != positions.get(2)) {
finalValue += Character.toString(valueChar);
}
else {
while (positions.get(0) == positions.get(2) || positions.get(1) == positions.get(2)) {
index = randomGenerator.nextInt(passcode.length());
valueChar = value.charAt(index);
positions.add(index);
}
}
}
}
System.out.println(finalValue + " " + positions);
}
有沒有可能發生的優化或其他建議的方法?
在此先感謝。
當你的代碼進入while循環時,它似乎會一直呆在那裏直到你的內存耗盡。 –
這是我的想法,但這是由於代碼中的錯誤導致無限循環,或者它只是消耗太多內存才能找到滿足條件的正確索引? –
你的代碼肯定有錯誤。在else if(j == 2)塊中調試最後一個while循環。我猜想這個循環運行無限。 我無法自己調試,因爲您沒有發佈包括所需變量和導入在內的整個代碼。 – DiabolicWords