[java] break boucle depuis une autre méthode

croc_odile -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
j'aimerais breaker une boucle depuis une autre méthode. Pour ce faire j'ai donné une étiquette i a la boucle en question et j'ai mis break i; dans mon autre méthode. Mais ça me marque en erreur : "the label i is missing"
Comment faire?
merci

A voir également:

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Tu ne peux pas, faire un break à partir d'une autre méthode, il faut d'abord que tu quittes la méthode en donnant une valeur particulière au return, et tu récupères cette valeur dans la boucle pour faire le break.
0
croc_odile
 
est-ce-que tu peux etre un peu plus clair? quelle valeur particuliere pour le return? et je la récupere normalement ou non?
merci de ta réponse rapide
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Ta méthode renvoie déjà surement un résultat (s'il n'y a pas besoin de faire un break) donc il faut déterminer une valeur que ta méthode ne pourra pas renvoyer en situation normale, mais qu'elle ne renverra que dans le cas particulier où il faut faire un break. Par exemple, si tu renvoies des entiers positifs, la valeur particulière peut-être -1 comme ça quand tu regardes le résultat de la méthode avec if, si c'est égal à -1 tu fais un break, sinon tu traites le résultat normalement.

On pourrait aussi utiliser une exception, et faire un try/catch autour de la méthode pour récupérer l'exception, on saura que si cette exception est levée il faut faire un break, sinon on continue le traitement normal de la boucle.
0
croc_odile
 
le truc c'est qu'il ya des instructions qui s'effectuent avant le break de toute façon
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
ce n'est pas un problème, les instructions s'effectueront normalement jusqu'au break actuel sauf que tu vas le remplacer par un return, ou un throw qui serait peut-être mieux...

public class BreakException extends Exception {} 

public void maMethode(int i) throws BreakException 
{ 
    // instructions à effectuer avant 

    //break i; // on enlève cette instruction 
    throw new BreakException() // on la remplace par ça 

    // instructions à effectuer après (si on n'a pas fait le break) 
} 

i: for (int i=0; i<5; i++) 
   { 
       try  
       { 
           // instructions à effectuer avant 
           maMethode(i); 
           // instructions à effectuer après (si on n'a pas fait le break) 
       } 
       catch (BreakException e) 
       { 
           break i; // cette ici que l'instruction apparaît 
       } 
   }
0