Bonjour tout le monde, je suis en train d'apprendre le java à la fac ..
J'ai fait une applet avec 10 traits de tailles aléatoires, et ensuite une fonction de trie. Je dois trier suivant la taille du trait générer (la fonction trie fonctionne correctement!) par contre, quand je réactualise l'applet (avec repaint()) je n'arrive pas à réafficher les traits dans l'ordre croissant de leur taille.
J'ai donc deux classes : une trait(pour dessiner un trait) et une Rect (pour l'applet et le reste)
Quelqu'un serait il me dire où pourrait se trouver mon erreur?
Merci d'avance.
import java.awt.Color; import java.awt.Graphics; public class Trait { public int x, y; //x et y coordonnées du trait public int taille; //taille du trait public Trait(int x,int y,int dim) //constructeur { this.x = x; //permet d'initialiser les coordonnées x et y this.y = y; taille = dim; //initialise la taille } public void dessiner (Graphics g) { g.setColor(Color.blue); //trait de couleur bleu g.drawLine(x,y,x+taille,y); //dessiner un trait de coordonnées x et y de départ // et (x+taille) et y d'arrivées } } import java.applet.*; import java.awt.*; public class Rect extends Applet implements Runnable { private Thread t; //création d'un thread t private Trait tab[]; //création d'un tableau tab de type Traie public Rect() //constructeur { int taille; tab = new Trait[10] ; //initialisation du tableau tab de Traie de taille 10 t = new Thread(this); int y=10; for(int i=0;i<10;i++) //on génére 10 traits { taille = (int) (Math.random() * 400 +1); //pour la taille aléatoire d'un traie y = y + 5; tab[i]= new Trait(20,y,taille); } t.start(); } public void paint (Graphics g) { setSize(500, 200); //taille de l'applet g.drawRect(10,10,getSize().width - 20 ,getSize().height - 20); //pour dessiner un rectangle for(int i=0;i<10;i++) //pour les 10 traits du tableau tab { tab[i].dessiner(g); //on dessine un trait System.out.println(tab[i].taille); //affichage triselection } } public void triselection() //tri { int i,j,m; for(i=0;i<(tab.length-1);i++) { m = i; for(j=i+1;j<tab.length;j++) if(tab[j].taille < tab[m].taille) m = j; if (m != i) { Trait c = tab[i]; tab[i] = tab[m]; tab[m] = c; } } } public void run() { triselection(); //lance le tri sélection repaint(); //permet de réactualiser l'applet } }
Lol j'ai regardé ton soucis et j'ai trouvé la solution :
Ca m'a pris un peu la tête mais le problème est tt bête :)
Je vais illustrer ca par un exemple :
A ton initialisation tu as par exemple
Trait[0] (x:10, y:10, taille:30)
Trait[1] (x:10, y:15, taille:20)
Trait[2] (x:10, y:20, taille:50)
Ensuite tu tries tes éléments par taille donc tu as
Trait[0] (x:10, y:15, taille:20)
Trait[1] (x:10, y:10, taille:30)
Trait[2] (x:10, y:20, taille:50)
Le truk c'est que quand tu vas afficher Trait[0] en premier
ben il sera tjr affiché en position verticale 15 et non en 10
comme il devrait l'être normalement.
Une résolution:
Bonne chance,
Niroken