Tri par ordre lexicographique
Résolu
Bonjour,
Je suis débutant en java et j'essaye en ce moment de trier un tableau de string par ordre lexicographique. J'ai essayer avec compareTo,.. mais pas moyen de compiler.
J'essaye en fait de faire une procédure d'un programme plus grand mais je bloque sur ce morceau du puzzle. Si vous avez des conseils, des idées,.. N'hésitez par à partager :)
Voici un exemple de ce que je veux trier:
Je suis débutant en java et j'essaye en ce moment de trier un tableau de string par ordre lexicographique. J'ai essayer avec compareTo,.. mais pas moyen de compiler.
J'essaye en fait de faire une procédure d'un programme plus grand mais je bloque sur ce morceau du puzzle. Si vous avez des conseils, des idées,.. N'hésitez par à partager :)
Voici un exemple de ce que je veux trier:
String achat[]=new String[10]; achat[0] = "coca"; achat[1] = "shampoing"; achat[2] = "cocaa"; achat[3] = "yahourt"; achat[4] = "b"; achat[5] = "zertyucoca"; achat[6] = "DANETTE"; achat[7] = "coca"; achat[8] = "choco"; achat[9] = "lait";
3 réponses
-
Re encore un problème. j'essaye de transformer des morceau de mes programme en procédure mais tout ne passe pas...
Ces les 1er procédure que je crée donc j'ai s'en doute fait une bête erreur.
Merci d'avance :)
import java.util.Scanner; //cette procedure prend 2 string et vérifie qu'il soit différent et ne contiennent qu'une lettre public static boolean proc_x_y(String x, String y) { boolean bon = false; if (x.length() == 1 & y.length() == 1) if(x.charAt(0) != y.charAt(0)) bon = true; return(bon);} public static boolean valider(StringBuffer course, char[]var1,char[]var2){ char test; int cpt = 0; boolean fermeture = false; while (cpt < course.length()) { test = course.charAt(cpt); if (test == var1[0] || test == var2[0]) { System.out.print("Fin du marché"); fermeture = true; cpt = course.length(); } cpt ++; if (fermeture == false && cpt == course.length()) { System.out.print("Produit valider"); } } cpt = 0; return(fermeture);} public static void main(String[] args) { System.out.println("Entrer vos paramètres (1 lettre par paramètre) "); boolean bon = false; String x; String y; Scanner clavier = new Scanner(System.in); do { System.out.println("Entrez x: "); x = clavier.nextLine(); System.out.println("Entrez y: "); y = clavier.nextLine(); bon = proc_x_y(x,y); //utiliser la procédure bon_x_y } while (bon == false); x = x.toLowerCase(); y = y.toLowerCase(); char[] var1 = x.toCharArray(); char[] var2 = y.toCharArray(); System.out.println("Bienvenue au marché de Pad"+x+"pad"+y); System.out.println("Faite vos course, N'entrez pas de maj et de mot contenant les lettres contenu dans vos paramètre."); System.out.println("Entrez des mots jusqu'à ce que vous ayez une faute."); boolean fermeture = false ; while (fermeture == false) { StringBuffer course = new StringBuffer(clavier.nextLine()); fermeture = valider(course,var1,var2); } } }-
ModérateurTu as mis un & sur ta condition (x.length() == 1 & y.length() == 1), or il faut utiliser && comme ça :
x.length() == 1 && y.length() == 1
Tu peux te passer de ta variable "bon" et même du if en faisant directement un return.
De plus n'oublie pas de tester si x et y sont null sinon ton programme risque de planter quand tu utilises la méthode length. De manière générale, il faut toujours penser à tous les cas possibles.
Enfin, donne un nom compréhensible à tes méthodes (en Java on ne parle pas de fonction ou procédure, mais bien de méthodes) en respectant les conventions de nommage (les _x_y ne sont pas conventionnels) et penses à documenter ton code.
/** * Testes deux String pour vérifier qu'elles sont de taille 1 et que leur unique caractère est différent. * @param x la première chaîne à tester * @param y la deuxième chaîne à tester * @return true si toutes les conditions sont vérifiées, false sinon */ public static boolean haveDifferentChar(String x, String y) { return x!=null && y!=null && x.length()==1 && y.length()==1 && x.charAt(0)!=y.charAt(0); }
Je te laisse continuer réfléchir à la suite de tes méthodes, mais quelques conseils : décomposes ton code en méthodes courtes, qui ne font qu'une seule chose à la fois, mais qui le font bien, c'est à dire en gérant tous les cas possibles.
-