J'ai une situation où le return
déclaration imbriquée dans deux for
boucles sera toujours atteinte, en théorie.
Le compilateur n'est pas d'accord et nécessite un return
déclaration en dehors de la for
boucle. J'aimerais connaître un moyen élégant d'optimiser cette méthode qui dépasse ma compréhension actuelle, et aucune de mes tentatives d'implémentation de break ne semble fonctionner.
Ci-joint une méthode à partir d'une affectation qui génère des entiers aléatoires et retourne les itérations parcourues jusqu'à ce qu'un deuxième entier aléatoire soit trouvé, généré dans une plage transmise à la méthode en tant que paramètre 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)
) et vous voyez que vous atteignez rapidement votre inaccessiblereturn
nextInt
lève une exception pour range < 0
Le seul cas où le retour est atteint est quandrange == 0
while(true)
boucle plutôt qu'une boucle indexée. Cela indique au compilateur que la boucle ne reviendra jamais.