Mam sytuację, w której returninstrukcja zagnieżdżona w dwóch forpętlach teoretycznie zawsze zostanie osiągnięta.
Kompilator nie zgadza się i wymaga returninstrukcji poza forpętlą. Chciałbym poznać elegancki sposób optymalizacji tej metody, który wykracza poza moje obecne rozumienie, i żadna z moich prób implementacji przerwy nie wydaje się działać.
Attached to metoda z przypisania, która generuje losowe liczby całkowite i zwraca iteracje wykonywane cyklicznie do momentu znalezienia drugiej losowej liczby całkowitej, wygenerowanej w zakresie przekazanym do metody jako parametr 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)) i zobaczysz, że szybko osiągasz swój nieosiągalnyreturn
nextIntrzuca wyjątek dla range < 0Jedynym przypadkiem, w którym osiągany jest zwrot, jestrange == 0
while(true)zamiast indeksowanej pętli. To mówi kompilatorowi, że pętla nigdy nie powróci.