Rechercher : dans
Par :

Java Trier par ordre aplhabétique(compareTo)

Dernière réponse le 8 aoû 2009 à 02:15:05 aleben, le 24 jan 2008 à 17:39:40 
 Signaler ce message aux modérateurs

Bonjour,
je commence a programmer en java avec l'école et je dois lire 3 trois chaines de caractères, les comparer avec compareTo, et les afficher à l'écran. J'ai déjà commencer, j'ai déjà fais pour lire les 3 chaines de caractère, mais je ne sais pas comment utiliser compareTo, pouvez-vous m'aidez.

Voici mon bout de code:


import java.util.Scanner;//pour lire les données au clavier
public class CompareString
{
public static void main(String[] args)
{
String chaine1,chaine2,chaine3; // Declaration

// cree un objet Scanner pour lire les donnees.
Scanner keyboard = new Scanner(System.in);
chaine1 = keyboard.nextLine();//lit les données au clavier
chaine2 = keyboard.nextLine();
chaine3 = keyboard.nextLine();



}
}

Configuration: Windows XP
Internet Explorer 7.0

Meilleures réponses pour « Java Trier par ordre aplhabétique(compareTo) » dans :
Tri par fusion - récursivité- VoirVoici une procédure récursive qui permet de trier un tableau de n entiers en utilisant la méthode de tri par fusion : Procedure Tri_Fusion (Var t : TAB; g, d : integer); Var m, i, j, k : integer; s : TAB; Begin If d > g Then ...
Pascal - Tri par insertion - Récursivité- VoirVoici une procédure récursive qui permet de trier un tableau de n entiers en utilisant la méthode de tri par insertion : Procedure Tri_Ins (Var t: TAB; n: integer); Var aux,i : integer; begin If n > 1 Then begin ...
SQL - Tri VoirTri des résultats Il est possible en SQL d'organiser les résultats grâce à la clause ORDER BY. La clause ORDER BY est suivie des mots clés ASC ou DESC, qui précisent respectivement si le tri se fait de manière croissante (par défaut) ou...
Java VoirHistoire de Java Java est un langage objet ressemblant au langage C++. Il a été mis au point en 1991 par la firme Sun Microsystems. Le but de Java à l'époque était de constituer un langage de programmation pouvant être intégré dans les appareils...

1

maxmethot, le 24 jan 2008 à 18:06:12

Salut aleben !


Essaye ca :

import java.util.Scanner;//pour lire les données au clavier
public class CompareString
{
public static void main(String[] args)
{
String chaine1,chaine2,chaine3; // Declaration

// cree un objet Scanner pour lire les donnees.
Scanner keyboard = new Scanner(System.in);
chaine1 = keyboard.nextLine();//lit les données au clavier
chaine2 = keyboard.nextLine();
chaine3 = keyboard.nextLine();

String temp1, temp2, temp3;

if(chaine1.compareTo(chaine2) > 0 )
{
temp1 = chaine1;
}
else if(chaine1.compareTo(chaine2) < 0 )
{
temp1 = chaine2;
}
else
System.out.print("Les chaines 1 et 2 sont identiques");

if(chaine2.compareTo(chaine3) > 0 )
{
temp2 = chaine2;
}
else if(chaine2.compareTo(chaine3) < 0 )
{
temp2 = chaine3;
}
else
System.out.print("Les chaines 2 et 3 sont identiques");

if(chaine3.compareTo(chaine1) > 0 )
{
temp3 = chaine3;
}
else if(chaine3.compareTo(chaine1) < 0 )
{
temp3 = chaine1;
}
else
System.out.print("Les chaines 3 et 1 sont identiques");

System.out.print("Voici les chaines en ordre alphabétique:\n\n" + temp1+ "\n" + temp2 + "\n" + temp3);
}
}

Tu devrait le tester avant parce que jai écris ca de mémoire.

Au plaisir,
Maxmethot Si quelqu'un te gifle la joue droite, tend lui la gauche.

Répondre à maxmethot

2

aleben, le 24 jan 2008 à 23:29:48

Merci Maxmethot,
il compile bien mais j'ai un problème il ne s'execute pas, comment ce fait-il??
j'ai fait une ou deux modif:
import java.util.Scanner;//pour lire les données au clavier
public class CompareString
{
public static void main(String[] args)
{
String chaine1,chaine2,chaine3; // Declaration

// cree un objet Scanner pour lire les donnees.
Scanner keyboard = new Scanner(System.in);
chaine1 = keyboard.nextLine();//lit les données au clavier
chaine2 = keyboard.nextLine();
chaine3 = keyboard.nextLine();
String phrase = new String();
phrase = "Error";
String temp1=phrase, temp2=phrase, temp3=phrase;

if(chaine1.compareTo(chaine2) > 0 )
{
temp1 = chaine1;
}
else if(chaine1.compareTo(chaine2) < 0 )
{
temp1 = chaine2;
}
else
System.out.print("Les chaines 1 et 2 sont identiques");

if(chaine2.compareTo(chaine3) > 0 )
{
temp2 = chaine2;
}
else if(chaine2.compareTo(chaine3) < 0 )
{
temp2 = chaine3;
}
else
System.out.print("Les chaines 2 et 3 sont identiques");

if(chaine3.compareTo(chaine1) > 0 )
{
temp3 = chaine3;
}
else if(chaine3.compareTo(chaine1) < 0 )
{
temp3 = chaine1;
}
else
System.out.print("Les chaines 3 et 1 sont identiques");

if(chaine1==phrase || chaine2==phrase || chaine3==phrase)
{
System.out.print("Error");
}
else
System.out.print("Voici les chaines en ordre alphabétique:\n\n" + temp1+ "\n" + temp2 + "\n" + temp3);
}
}

Est-ce normal?

Répondre à aleben

3

maxmethot, le 25 jan 2008 à 04:39:57
  • +1

Oui c'est normal parce que ton string phrase est en fait un "objet" string que tu dois comparer en utilisant la méthode Equals plutôt que les == . Remplace ton dernier if par celui ci et re-teste :

if(chaine1.equals(phrase) || chaine2.equals(phrase) || chaine3.equals(phrase))


En passant, tu n'a pas besoin de dire a ta string que tu la déclare en objet :

String phrase = new String();
phrase = "Error";

Tu peux tout simplement lui dire :

String phrase = "Error";

et le compilateur comprendra que c'est un objet de type string automatiquement.

Ah oui, également, fais attention: tu lance une condition qui va vérifier si la chaine1,2 ou 3 est égale à "Error", mais nulle part dans le programme tu dis à ces chaine de prendre la valeur "Error", ce qui fait en sorte que cette condition retournera toujours la valeur "False" et donc n'exécutera jamais le code à l'intérieur de la condition. Je ne sais pas exactement qu'est-ce que tu essayais de tester avec cette condition, mais je peux te confirmer que présentement, elle ne te sert littéralement à rien. Tu pourrais l'enlever et il n'y aurait pas de différence.

En espérant t'avoir éclairé un peu,
N'hésite pas si tu as d'autres questions,
Au plaisir,
Maxmethot Si quelqu'un te gifle la joue droite, tend lui la gauche.

Répondre à maxmethot

4

aleben, le 26 jan 2008 à 00:41:40

Maxmethot,
j'ai remis la version que tu m'avais dit en premier mais il ne s'execute pas, il compile et quand je l'exécute il ne se passe rien

Répondre à aleben

5

maxmethot, le 27 jan 2008 à 06:17:56

Quel IDE utilise tu ?!

Eclipse, NetBeans ?!

As tu des messages d'erreurs dans la console ?! Si oui, poste les ici.

maxmethot Si quelqu'un te gifle la joue droite, tend lui la gauche.

Répondre à maxmethot

6

aleben, le 27 jan 2008 à 22:29:46

Bonjour,
j'utilise NetBeans et quand je le compile il ne me met aucune erreur c'est quand il met running en bas a droite que la ça dure tellement longtemps que c'est anormal et je n'ai jamais de résultat même est le laissant tourner plus de 3 minutes.

aleben

Répondre à aleben

7

soufian1364, le 21 fév 2008 à 23:39:43

Bonjour eleben, Bonjour maxmethot, Bonjour à tous,

d'abors, j'aimerais vous remercier pour ce sujet, cette question,
et personnelement je vous propose ma résolution (toujour dans le même probleme) :


import java.io.*;
public class ComparaisonDeTroixString {
public static void main (String [] args)throws IOException {
BufferedReader clavier=new BufferedReader (new InputStreamReader (System.in));
String a,b,c,temp1="", temp2="", temp3="";
System.out.println("Veuillez saisir troix mots");
a=clavier.readLine();
b=clavier.readLine();
c=clavier.readLine();

if ((a.compareTo(b)>0) && (a.compareTo(c)>0)) { // si( a>b et a>c )
temp1=a;
if (b.compareTo(c)>0){
temp2=b;
temp3=c;
}
else {
temp2=c;
temp3=b;
}
}

if ((b.compareTo(a)>0) && (b.compareTo(c)>0)) { // si( b>a et b>c )
temp1=b;
if (a.compareTo(c)>0){
temp2=a;
temp3=c;
}
else {
temp2=c;
temp3=a;
}
}

if ((c.compareTo(a)>0) && (c.compareTo(b)>0)) { // si( c>a et c>b )
temp1=c;
if (a.compareTo(b)>0){
temp2=a;
temp3=b;
}
else {
temp2=b;
temp3=a;
}
}

System.out.println("Le bon tri est :"+temp3+" puis "+temp2+" puis "+temp1);

}
}

Répondre à soufian1364

8

aleben, le 14 mar 2008 à 00:31:05

Merci à tous pour vos réponses

Répondre à aleben

9

prof2011, le 2 aoû 2009 à 23:20:50

Bonjour soufian1364 et Bonjour à tous je m'appel zeid et je voudrer savoir comment on peut generaliser tri par
orde alphabetique

sur un tableau de plusieur objet personne

Répondre à prof2011

10

alt157, le 7 aoû 2009 à 11:11:20

Bonjour tout le monde,

@prof2011 : Tu peux créer une méthode statique dans ta Classe Personne par exemple :

public ArrayList<Personnes> TriAlphabetique(ArrayList<Personnes> pListe)
{}

Cette méthode pourra comporter un simple algorithme de tri du genre :

public ArrayList<Personnes> TriAlphabetique(ArrayList<Personnes> pListe)
{
for (int i = 0; i < pListe.size(); i++)
{
int min = i;
for( int j = i ; j < pListe.size(); j++)
{
if( pListe.get(i).getNom().compareTo( pListe.get(j).getNom()) > 0 )
{
min = j
}
}
Personnes tmp = pListe.get(i);
pListe.set(i, pListe.get(j));
pListe.set(min, tmp);
}
return pListe;
}

(pas testé je l ai fait de tete vu que je n ai pas de machines avec Java sous la main mais tu as l idée général ainsi)

Répondre à alt157

11

alt157, le 7 aoû 2009 à 11:15:26

Pour l entete de la méthode ce n est pas :

public ArrayList<Personnes> TriAlphabetique(ArrayList<Personnes> pListe)

je me suis trompé j ai oublié le mot static ce qui donne :

public static ArrayList<Personnes> TriAlphabetique(ArrayList<Personnes> pListe)

Répondre à alt157

12

prof2011, le 7 aoû 2009 à 14:21:11

Bonjour tout le monde,

alt157 : merci ce claire
et merci pour la rectification!!

Répondre à prof2011

13

prof2011, le 7 aoû 2009 à 14:37:12

Salut alt157
il y a une message d'erreur comme ceci

Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:840)
at java.util.Scanner.next(Scanner.java:1461)
at java.util.Scanner.nextInt(Scanner.java:2091)
at java.util.Scanner.nextInt(Scanner.java:2050)
at personne_comparaison.Main.main(Main.java:26)
Java Result: 1

Répondre à prof2011

14

 alt157, le 8 aoû 2009 à 02:15:05

Bonsoir

En vérifiant mon algo ce soir je me suis rendu compte que dans mon test j avais écrit :

if( pListe.get(i).getNom().compareTo( pListe.get(j).getNom()) > 0 )

a la place de :

if( pListe.get(min).getNom().compareTo( pListe.get(j).getNom()) > 0 )

Donc voici un petit test effectué :

Classe Personnes

import java.util.ArrayList;

public class Personnes 
{
	String Nom;
	Integer Age;
	
	public Personnes(String pNom, Integer pAge)
	{
		Nom = pNom;
		Age = pAge;
	}

	public Integer getAge() 
	{
		return Age;
	}

	public void setAge(Integer age) 
	{
		Age = age;
	}

	public String getNom() 
	{
		return Nom;
	}

	public void setNom(String nom) 
	{
		Nom = nom;
	}
	
	public String Affichage()
	{
		return "Nom :\t" + Nom + "\r\nAge :\t" + String.valueOf(Age) + "\r\n";
	}
	
	public static ArrayList<Personnes> TriAlphabetique(ArrayList<Personnes> pListe)
	{
		Integer i, j, min;
		Personnes temp;
		for(i = 0; i < pListe.size(); i++)
		{
			min = i;
			for(j = i; j < pListe.size(); j++)
			{				
				if(pListe.get(min).getNom().compareTo(pListe.get(j).getNom()) > 0)
				{					
					min = j;
				}
			}
			temp = pListe.get(i);
			pListe.set(i, pListe.get(min));
			pListe.set(min, temp);			
		}
		return pListe;		
	}

}


Programme de test :

import java.util.ArrayList;
import java.util.Iterator;

public class test_triAlphabetique 
{
	public static void main(String[] args) 
	{
		ArrayList<Personnes> listePersonnes = new ArrayList<Personnes>();
		listePersonnes.add(new Personnes("prof2011", 25));
		listePersonnes.add(new Personnes("alt157", 21));
		listePersonnes.add(new Personnes("bisounours", 21));		
		listePersonnes.add(new Personnes("douffi", 21));
		listePersonnes.add(new Personnes("cowboy", 21));
		listePersonnes.add(new Personnes("polo", 23));
		
		Iterator<Personnes> iter = listePersonnes.iterator();
		while(iter.hasNext())
		{
			Personnes tmp = iter.next();
			System.out.println(tmp.Affichage());
		}
		
		System.out.println("\r\n__________________________\r\n");
		
		Personnes.TriAlphabetique(listePersonnes);
		
		iter = listePersonnes.iterator();
		while(iter.hasNext())
		{
			Personnes tmp = iter.next();
			System.out.println(tmp.Affichage());
		}		
	}
}


Cela nous renvoie bien une liste triée par ordre alphabétique :)

Bonne soirée

Répondre à alt157