У меня есть ситуация, когда returnоператор, вложенный в два цикла for, всегда будет достигнут теоретически.
Компилятор не согласен и требует returnутверждения вне forцикла. Я хотел бы знать элегантный способ оптимизации этого метода, который выходит за рамки моего текущего понимания, и ни одна из моих попыток реализации break, похоже, не работает.
Прикрепленный - это метод из присваивания, который генерирует случайные целые числа и возвращает итерации, циклически выполняемые до тех пор, пока не будет найдено второе случайное целое число, сгенерированное в пределах диапазона, переданного в метод как параметр 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)), и вы увидите, что быстро достигнете своего недостижимого местаreturn
nextIntгенерирует исключение для range < 0Единственный случай, когда достигается возврат, когдаrange == 0
while(true)цикл, а не индексированный. Это сообщает компилятору, что цикл никогда не вернется.