リストからいくつかの値を読み込み、指定された長さのものだけを保持し、それぞれから3文字を抽出する単純なプログラムを作成しました。時間。我々はプログラムnick07n値を持っている場合たとえば"リストからの値チェック"プログラムのJavaヒープスペースエラー
が同じ位置から撮影と同じではないかもしれませんそれから3つのランダムな文字列を抽出する必要があります。プログラムが正常に動作しますが
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