理論的には、return2つのforループにネストされたステートメントに常に到達する状況にあります。
コンパイラーはこれに同意せずreturn、forループ外のステートメントを要求します。私の現在の理解を超えているこの方法を最適化するエレガントな方法を知りたいのですが、私が試みたbreakの実装はどれもうまくいかないようです。
添付されているのは、ランダムな整数を生成し、intパラメータとしてメソッドに渡された範囲内で生成された2番目のランダムな整数が見つかるまで繰り返される反復を返す割り当てからのメソッドです。
private static int oneRun(int range) {
int[] rInt = new int[range+1]; // Stores the past sequence of ints.
rInt[0] = generator.nextInt(range); // Inital random number.
for (int count = 1; count <= range; count++) { // Run until return.
rInt[count] = generator.nextInt(range); // Add randint to current iteration.
for (int i = 0; i < count; i++) { // Check for past occurence and return if found.
if (rInt[i] == rInt[count]) {
return count;
}
}
}
return 0; // Never reached
}
oneRun(0)ます()と、到達不能にすばやく到達することがわかりますreturn
nextIntスローされるのは例外をスローするためですrange < 0リターンに到達する唯一のケースはいつrange == 0
while(true)、インデックス付きループではなく、ループを使用できます。これは、ループが戻らないことをコンパイラーに伝えます。