Saya memiliki situasi di mana returnpernyataan yang bersarang dalam dua forloop akan selalu tercapai, secara teoritis.
Kompilator tidak setuju dan membutuhkan returnpernyataan di luar forloop. Saya ingin mengetahui cara elegan untuk mengoptimalkan metode ini yang berada di luar pemahaman saya saat ini, dan tidak ada upaya penerapan break yang berhasil saya lakukan.
Terlampir adalah metode dari penugasan yang menghasilkan bilangan bulat acak dan mengembalikan iterasi yang melalui siklus hingga bilangan bulat acak kedua ditemukan, yang dihasilkan dalam rentang yang diteruskan ke metode sebagai parameter int.
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)) dan Anda melihat bahwa Anda dengan cepat mencapai tak terjangkau Andareturn
nextIntmelempar pengecualian untuk range < 0Satu-satunya kasus di mana pengembalian tercapai adalah ketikarange == 0
while(true)daripada loop yang diindeks. Ini memberi tahu kompiler bahwa loop tidak akan pernah kembali.