Tri par bulle

Fermé
domxaline - 20 nov. 2015 à 21:04
 domxaline - 21 nov. 2015 à 11:37
Bonjour,
mon prg prend pas en compte la première valeur:
5,7, 8, 6

et une autre question est quel est le rôle de taille-1;//signifie 4-1 ou 3-1;
debug garde toujours taille 4
for ( i=0; i<taille-1; i++ )


import java.util.Scanner;
public class Test3
{
public static void main(String[] args)
{
int i = 0;
int tab[] = {5,7,8,6};
boolean maxi = true;
int taille = tab.length;
while(maxi)
{
maxi = false;
for ( i=0; i<taille-1; i++ )
//for ( i=1; i<taille; i++ )
{
if ( tab[i] > tab[i+1] )
{
int temp = tab[i];
tab[i] = tab[i+1];
tab[i+1] = temp;
maxi = true;
}

System.out.println("Trié les éléments en ordre croissant "+(i+1)+":"+tab[i+1]);
}
System.out.println(" ** ");
}
}
}

quelqu'un peut m'aider svp



2 réponses

PRNE555 Messages postés 15 Date d'inscription vendredi 6 novembre 2015 Statut Membre Dernière intervention 24 mars 2016 2
20 nov. 2015 à 22:49
Salut,

Ton 5 n'est pas pris en compte à cause de ton
tab[i+1]
, à la première itération de ta boucle for, i vaut 0, 0+1=1, donc ton 5 qui est l'élément d'indice 0 n'est pas affiché.

Ton taille-1 signifie 4-1, car ton array comporte 4 éléments sa longueur est donc 4.

Si tu veux que ton code fonctionne correctement, il faut que tu retires ton
taille-1
et que tu remplaces par
taille
.

Ensuite tu rajoutes une condition qui vérifie que i est inférieur à taille-1, pour pas que tu cherche à accéder à un élément dont l'indice dépasse l'indice max de ton tableau.

Pour finir dans ton
println
enlève le +1 dans
tab[i+1]
et tout devrait rouler !

N'hésite pas à me demander si j'ai pas été suffisamment clair !
0
j'ai corrigé mon prg

import java.util.Scanner;
public class Test3
{
public static void main(String[] args)
{
int i = 0;
int tab[] = {5,7,8,6};
boolean maxi = true;
int taille = tab.length;
while(maxi)
{
maxi = false;
for ( i=0; i<taille; i++ )
{
if(i<taille-1)
{
if ( tab[i] > tab[i+1] )
{
int temp = tab[i];
tab[i] = tab[i+1];
tab[i+1] = temp;
maxi = true;
}
}
System.out.println("Trié les éléments en ordre croissant "+(i+1)+":"+tab[i]);
}
System.out.println(" ** ");
}
}
}

mais, s'il fallait écrire:
"ton println enlève le +1 dans tab[i+1] et tout devrait rouler "
pouvez vous m'expliquer cette parti de ce code:

int temp = tab[i];
tab[i] = tab[i+1];
tab[i+1] = temp;
0