Tableau trié en java

Résolu
grosprobleme23 -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

voila je suis débutant en programmation java et on me demande de verifié si un tableau est trié. En regardant la correction il y a un element que je ne comprend pas :


static boolean estTrie(int[] t){
for(int i=0; i<t.length-1; i++){
if(t[i]<t[i+1])
return true;
}
else
return false;
}

ce que je ne comprend pas c'est la boucle for, pourquoi avons nous mis t.length-1 et pas t.length??

Merci de m'aider !

A voir également:

2 réponses

Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Bonjour,

Par contre, en dehors de ce -1 très bien expliqué par Le Père, ton programme ne peut pas marcher !

Il ne faut pas mettre "return" à l'intérieur de la boucle, sinon il s'arrêtera au premier élément qui est inférieur au suivant. Du coup, le tableau [0, 1, 9, 8] sera marqué comme trié, ce qui est faux.

Plus gênant encore, ce code ne compile même pas ! Il y a des soucis avec les accolades, et le "else" qui est en-dehors de la boucle FOR alors qu'il renvoie au IF...

Xavier
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
"ce code ne compile même pas !"
Ça ce n'est pas très gênant, il manque les deux dernières accolades fermantes, la classe qui englobe, le main, etc. Mais le plus important est là. Je préfère un code qui va à l'essentiel plutôt que s'embêter avec des lignes inutiles que l'on devine de toute façon.

"Il ne faut pas mettre "return" à l'intérieur de la boucle, sinon il s'arrêtera au premier élément qui est inférieur au suivant."
Je suis (presque) d'accord avec toi, cependant je garderai quand même un des deux return, pour renvoyer false dès qu'on a détecté un élément plus grand que son successeur. Du coup il faudrait même carrément changer le test sur le if, parce que là on teste si le tableau est décroissant, alors certes c'est un tri, mais implicitement on s'attend à ce que ce soit un tri en ordre croissant.

Enfin, il faudrait traiter le cas où t==null, quitte à renvoyer soit même une exception, mais c'est mieux qu'attendre que le t.length provoque lui même un NullPointerException.

public static boolean estTrie(int[] t)
{
    if (t==null)
        throw new IllegalArgumentException("Argument can't be null");
    
    for (int i=0; i<t.length-1; i++)
        if (t[i] > t[i+1])
            return false;
    
    return true; 
}
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Ce n'est pas qu'une question d'accolade manquante. Le ELSE ne correspond à rien ;)
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Effectivement, j'avais mal lu, j'espère que toutes les corrections de ses exercices ne sont pas comme ça, parce que ça vaut pas beaucoup de points...
0
Telsample Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   1
 
On fait t.length-1 car la méthode length() renvoie la taille du tableau. Or un tableau de 10 cases, va en réalité de t[0] à t[9] donc il faut que i aille de 0 à 9 et non pas de 0 à 10.
-1
Utilisateur anonyme
 
Bonjour

Non, il faut que i aille de 0 à 8 et non pas 9 car on compare t[0] à t[1], t[1] à t[2]... la dernière comparaison doit être t[8] à t[9] , donc avec i=8. C'est bien le cas avec le code donné, dont la dernière boucle est exécutée avec i<10-1 donc i<9 donc i=8
0
Telsample Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   1
 
Paraphrase.
0
Utilisateur anonyme
 
Non, rectification. Tu dis "il faut que i aille de 0 à 9" alors qu'il ne doit aller que de 0 à 8 pour un tableau de 10 cases.
S'il fallait que i aille de 0 à 9, il n'y aurait pas de -1 après t.length. Or c'est précisément ce -1 qui gêne grosprobleme23.
0