J'ai une situation où le return déclaration imbriquée dans deux forboucles sera toujours atteinte, en théorie.
Le compilateur n'est pas d'accord et nécessite un return déclaration en dehors de la forboucle. 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
nextIntlève une exception pour range < 0Le 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.