이론적으로는 return두 개의 for루프에 중첩 된 문에 항상 도달 하는 상황이 있습니다.
컴파일러는 동의하지 않으며 루프 return외부의 명령문이 필요합니다 for. 현재의 이해를 뛰어 넘는이 방법을 최적화하는 우아한 방법을 알고 싶습니다. 시도한 break 구현 중 어느 것도 작동하지 않는 것 같습니다.
Attached는 임의의 정수를 생성하고 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)하지 않은 경우 인덱싱 된 루프 대신를 사용할 수 있습니다 . 이것은 컴파일러에게 루프가 절대로 반환되지 않는다는 것을 알려줍니다.