У мене є ситуація, коли returnтвердження, вкладене в дві forпетлі, завжди буде досягнуто теоретично.
Компілятор не погоджується і вимагає returnзаяви поза межами forциклу. Я хотів би знати елегантний спосіб оптимізації цього методу, який не відповідає моєму теперішньому розумінню, і жодна з моїх спроб реалізації перерви, здається, не спрацює.
Вкладений - це метод із призначення, який генерує випадкові цілі числа та повертає ітерації, прокручені до тих пір, поки не буде знайдено друге випадкове ціле число, генерується в межах діапазону, переданого методу у вигляді параметра 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)швидше, ніж індексованим циклом. Це повідомляє компілятору, що цикл ніколи не повернеться.