J'ai cet extrait de code simple avec une déclaration de rupture. J'essayais de résoudre ce problème http://codeforces.com/contest/787/problem/B. Je suis venu avec cette solution:Pourquoi cette déclaration de rupture ne fonctionne-t-elle pas comme prévu?
public static void main(String[] args) {
FastReader in = new FastReader();
int n = in.nextInt(), m = in.nextInt();
HashSet<Integer> set = new HashSet<>();
for(int i=0;i<m;i++){
set.clear();
int k = in.nextInt();
boolean cancel = true;
for(int j=0;j<k;j++){
int cur = in.nextInt();
if(set.contains(-cur)){
cancel = false;
break;
}
else set.add(cur);
}
if(cancel && k!=0){
System.out.println("YES");
return;
}
}
System.out.println("NO");
}
Elle n'a pas réussi les tests, mais le moment je supprimer l'instruction break après l'annulation = false; ligne. Ça marche. Je n'arrive pas à expliquer ce qui est différent entre avoir la déclaration de rupture de sorte que lorsque la première fois que vous avez trouvé -cur intérieur, vous changiez d'annuler à false puis rompez et juste assignez false pour annuler chaque fois que vous trouvez -cur intérieur set et attendez jusqu'à la fin de la boucle et ne pas casser.
L'instruction 'break' s'applique à la boucle * inner *. Et 'cancel' est faux, donc la boucle externe continue. –