J'essaie d'imprimer les occurrences des deux nombres entiers les plus élevés dans un tableau entier mais que la sortie continue de sortir avec les trois premiers.
Integer[] scores = {4,4,4,6,6,4,2,3};
Arrays.sort(scores, Collections.reverseOrder());
int flag = 0;
System.out.println(scores[0]);
int first = scores[0];
for (int i = 1; i < scores.length; i++) {;
if(first == scores[i]) {
System.out.println(scores[i]);
}else {
first = scores[i];
flag++;
System.out.println(scores[i]);
}
if(flag == 2) {
break;
}
}
3 Réponses :
Le problème est le J'ai changé / simplifié le code comme p> il est plus intuitif à renommer system.out.println (scores [i]) code> Après l'incrémentation du drapeau 2. Vous ne devez pas imprimer lorsqu'il s'agit du troisième numéro de la liste. d'abord code> comme numéro code> ou quelque chose d'autre comme il peut contenir le premier ou le deuxième numéro. p> p>
integer [] scores = {4,4,4,6,6,4,2,3}; Arrays.sort (Scores, Collections.Reversedon ());
int flag = 0;
System.out.println(scores[0]);
int first = scores[0];
for (int i = 1; i < scores.length; i++) {;
if(first == scores[i]) {
System.out.println(scores[i]);
}else if(first != scores[i] && flag == 0) {//you need to change this
first = scores[i];
flag++;
System.out.println(scores[i]);
}else{ // if you dont want to traverse list after getting desired output
break;
}
}
Je préférerais un int [] code> sur integer [] code> et itérer le tableau trié en arrière. Vous n'avez réellement besoin d'un sinon code> ici, vérifiez simplement que vous n'êtes pas à la fin de la matrice - et si vous ne vérifiez pas que le score actuel diffère de la suivante (puisque nous » re itération en arrière). Vous n'avez besoin que de tester drapeau code> lorsque cette condition est remplie (et break code> après le deuxième changement). Comme,