Tableau trié en java

Résolu/Fermé
grosprobleme23 - 9 déc. 2013 à 14:51
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 10 déc. 2013 à 18:35
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 jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
9 déc. 2013 à 17:09
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 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
9 déc. 2013 à 18:44
"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 jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
10 déc. 2013 à 13:08
Ce n'est pas qu'une question d'accolade manquante. Le ELSE ne correspond à rien ;)
0
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
10 déc. 2013 à 18:35
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 lundi 9 décembre 2013 Statut Membre Dernière intervention 9 décembre 2013 1
9 déc. 2013 à 14:55
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
9 déc. 2013 à 15:18
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 lundi 9 décembre 2013 Statut Membre Dernière intervention 9 décembre 2013 1
9 déc. 2013 à 15:25
Paraphrase.
0
Utilisateur anonyme
9 déc. 2013 à 16:37
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