Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2944 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  probleme de bloucle for...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme de bloucle for...

n°1283054
blaise_lap​orte
Posté le 13-01-2006 à 15:32:25  profilanswer
 

Voila, j'ai le constructeurs suivant
(oui, je sais que ce n'est pas forcement une bonne idée de mettre tout ça dans le constructeur, mais c'est pour mes test)
 

Code :
  1. private double coefX = Double.POSITIVE_INFINITY ;
  2. private double coefY = Double.POSITIVE_INFINITY ;
  3. private double origineX = Double.POSITIVE_INFINITY;
  4. private double origineY = Double.POSITIVE_INFINITY;
  5. public Echelle(ArrayList<Courbe> lc){
  6.  double xMax, yMax, xMin, yMin;
  7.  int taille = lc.size();
  8.  int rangXMax = 0, rangYMax = 0, rangXMin = 0, rangYMin = 0;
  9.  for(int rang=0; rang<taille; rang++){
  10.   System.out.println("\ntest" + rang +"\n"+((Courbe)lc.get(rang)).toString());
  11.   if(((Courbe)lc.get(rangXMax)).getXMax().getX() > ((Courbe)lc.get(rang)).getXMax().getX())continue;
  12.   else rangXMax = rang;
  13.   if(((Courbe)lc.get(rangYMax)).getYMax().getY() > ((Courbe)lc.get(rang)).getYMax().getY())continue;
  14.   else rangYMax = rang;
  15.   if(((Courbe)lc.get(rangXMin)).getXMin().getX() < ((Courbe)lc.get(rang)).getXMin().getX())continue;
  16.   else rangXMin = rang;
  17.   if(((Courbe)lc.get(rangYMin)).getYMin().getY() < ((Courbe)lc.get(rang)).getYMin().getY())continue;
  18.   else rangYMin = rang;
  19.   System.out.println("rangXMax =" +rangXMax);
  20.   System.out.println("rangYMax =" +rangYMax);
  21.   System.out.println("rangXMin =" +rangXMin);
  22.   System.out.println("rangYMin =" +rangYMin);
  23.  }
  24.  xMax = ((Courbe)lc.get(rangXMax)).getXMax().getX();
  25.  yMax = ((Courbe)lc.get(rangYMax)).getYMax().getY();
  26.  xMin = ((Courbe)lc.get(rangXMin)).getXMin().getX();
  27.  yMin = ((Courbe)lc.get(rangYMin)).getYMin().getY();
  28.  System.out.println( "xMax = "+xMax+"\n"+
  29.     "yMax = "+yMax+"\n"+
  30.     "xMin = "+xMin+"\n"+
  31.     "yMin = "+yMin+"\n" );
  32. }


 
L'objet ArrayListe que je met en parametre contient deux objet Courbe.
A l'execution, j'obtient ceci:

Citation :


test0
PointMesure[10.0, 45.0]
PointMesure[100.0, 40.0]
PointMesure[1000.0, 20.0]
PointMesure[10000.0, 30.0]
PointMesure[100000.0, 0.0]
 
rangXMax =0
rangYMax =0
rangXMin =0
rangYMin =0
 
test1
PointMesure[1.0, 300.0]
PointMesure[10.0, 500.0]
 
xMax = 100000.0
yMax = 500.0
xMin = 1.0
yMin = 0.0


 
Je rentre une premiere fois dans la boucle for et execute toutes les lignes.
a la deuxieme fois (deuxieme objet Courbe) il rentre dans la boucle, execute la premiere ligne, mais zap totalement les System.out.println de fin...  
 
Moi pas comprendre!
 

mood
Publicité
Posté le 13-01-2006 à 15:32:25  profilanswer
 

n°1283105
Bidem
Posté le 13-01-2006 à 16:33:25  profilanswer
 

blaise_laporte a écrit :

...
Je rentre une premiere fois dans la boucle for et execute toutes les lignes.
a la deuxieme fois (deuxieme objet Courbe) il rentre dans la boucle, execute la premiere ligne, mais zap totalement les System.out.println de fin...  
 
Moi pas comprendre!


 
Pour moi, les 2 itérations de la boucle se passent bien. C'est juste que ta 2ème courbe ne contient que 2 points.
 
PS : ton code est totallement illisible, utilise des variables locales au lieu d'apeler 46 fois ((Courbe)lc.get(rangXMax)).getXMax().getX()
 
ex:

Code :
  1. int taille = lc.size();
  2.     // plutot que de travailler avec le rang on utilise directement les objets
  3.     Courbe rangXMax = (Courbe) lc.get(0);
  4.     Courbe rangYMax = (Courbe) lc.get(0);
  5.     Courbe rangXMin = (Courbe) lc.get(0);
  6.     Courbe rangYMin = (Courbe) lc.get(0);
  7.     // NB : on commence la boucle à 1
  8.     for (int rang = 1; rang < taille; rang++) {
  9.       // courbe courrante
  10.       Courbe courbe = (Courbe) lc.get(rang);
  11.       System.out.println("\ntest" + rang + "\n" + courbe.toString());
  12.       if (rangXMax.getXMax().getX() > courbe.getXMax().getX()) {
  13.         continue;
  14.       } else {
  15.         rangXMax = courbe;
  16.       }
  17.       if (rangYMax.getYMax().getY() > courbe.getYMax().getY()) {
  18.         continue;
  19.       } else {
  20.         rangYMax = courbe;
  21.       }
  22.       if (rangXMin.getXMin().getX() < courbe.getXMin().getX()) {
  23.         continue;
  24.       } else {
  25.         rangXMin = courbe;
  26.       }
  27.       if (rangYMin.getYMin().getY() < courbe.getYMin().getY()) {
  28.         continue;
  29.       } else {
  30.         rangYMin = courbe;
  31.       }
  32.       System.out.println("rangXMax =" + rangXMax);
  33.       System.out.println("rangYMax =" + rangYMax);
  34.       System.out.println("rangXMin =" + rangXMin);
  35.       System.out.println("rangYMin =" + rangYMin);
  36.     }
  37.     double xMax = rangXMax.getXMax().getX();
  38.     double yMax = rangYMax.getYMax().getY();
  39.     double xMin = rangXMin.getXMin().getX();
  40.     double yMin = rangYMin.getYMin().getY();
  41.     System.out.println(
  42.       "xMax = " + xMax + "\n"
  43.       + "yMax = " + yMax + "\n"
  44.       + "xMin = " + xMin + "\n"
  45.       + "yMin = " + yMin + "\n" );


 

n°1283141
blaise_lap​orte
Posté le 13-01-2006 à 17:02:13  profilanswer
 

Merci pour les conseil de lisibilité. C'est des reflexes que j'ai pas encore aquis.
Du coup, mon code donne ceci:

Code :
  1. public Echelle(ArrayList<Courbe> lc){
  2.  double xMax, yMax, xMin, yMin;
  3.  Courbe courbeXMax = (Courbe) lc.get(0);
  4.  Courbe courbeYMax = (Courbe) lc.get(0);
  5.  Courbe courbeXMin = (Courbe) lc.get(0);
  6.  Courbe courbeYMin = (Courbe) lc.get(0);
  7.  int taille = lc.size();
  8.  int rangXMax = 0, rangYMax = 0, rangXMin = 0, rangYMin = 0;
  9.  for(int rang=0; rang<taille; rang++){
  10.   // courbe courrante
  11.   Courbe courbe = (Courbe) lc.get(rang);
  12.   System.out.println("\ntest" + rang +"\n"+(courbe.toString()));
  13.   if(courbeXMax.getXMax().getX() > courbe.getXMax().getX())continue;
  14.   else courbeXMax = courbe;
  15.   if(courbeYMax.getYMax().getY() > courbe.getYMax().getY())continue;
  16.   else courbeYMax = courbe;
  17.   if(courbeXMin.getXMin().getX() < courbe.getXMin().getX())continue;
  18.   else courbeXMin = courbe;
  19.   if(courbe.getYMin().getY() < courbe.getYMin().getY())continue;
  20.   else courbeYMin = courbe;
  21.   System.out.println("rangXMax =" +courbeXMax.getXMax().getX());
  22.   System.out.println("rangYMax =" +courbeYMax.getYMax().getY());
  23.   System.out.println("rangXMin =" +courbeXMin.getXMin().getX());
  24.   System.out.println("rangYMin =" +courbeYMin.getYMin().getY());
  25.  }
  26.  xMax = courbeXMax.getXMax().getX();
  27.  yMax = courbeYMax.getYMax().getY();
  28.  xMin = courbeXMin.getXMin().getX();
  29.  yMin = courbeYMin.getYMin().getY();
  30.  System.out.println( "xMax = "+xMax+"\n"+
  31.     "yMax = "+yMax+"\n"+
  32.     "xMin = "+xMin+"\n"+
  33.     "yMin = "+yMin+"\n" );
  34. }


 
mais en sortie j'ai de nouveau:

Citation :


test0
PointMesure[10.0, 45.0]
PointMesure[100.0, 40.0]
PointMesure[1000.0, 20.0]
PointMesure[10000.0, 30.0]
PointMesure[100000.0, 0.0]
 
rangXMax =100000.0
rangYMax =45.0
rangXMin =10.0
rangYMin =0.0
 
test1
PointMesure[1.0, 300.0]
PointMesure[10.0, 500.0]
 
xMax = 100000.0
yMax = 45.0
xMin = 10.0
yMin = 0.0


 
Le trie ne ce fais pas corectement (yMax devrait etre 500.0 et xMin 1.0) de même que les System.out.println a la fin de la boucle for ne s'execute pas.

n°1283154
masklinn
í dag viðrar vel til loftárása
Posté le 13-01-2006 à 17:09:44  profilanswer
 

J'ai la nette impression que tu n'as pas compris le but de la commande "continue".
 
"Continue" ça va directement à la fin de l'itération de boucle actuelle, pour passer au prochain "tour", ça ne veut pas dire qu'on continue à exécuter le code actuel (ce qui n'aurait aucun intérêt [:pingouino])
 
Résultat, dès qu'il a un test qui réussit (pas de modifications à effectuer sur un paramètre) il saute à la fin du for et passe au prochain tour (ou à la fin de la boucle si la liste de courbes est terminée) [:spamafote]
 
Et accessoirement ya des trucs qu'on appelle les débuggers, ça marche vachement bien [:pingouino]


Message édité par masklinn le 13-01-2006 à 17:10:25

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1283175
blaise_lap​orte
Posté le 13-01-2006 à 17:25:46  profilanswer
 

En effet, j'avais pas compris continue...
 
Pour ce qui est des debuggers, j'ai essayé une fois, mais j'y conprenai que dalle. Mais j'était vraiment newbies en progra (si si, plus que maintenant :D) je vais essayé de m'y remettre.
 
Merci!

n°1283246
trevor
laissez la vie vous étonner...
Posté le 13-01-2006 à 19:30:49  profilanswer
 

à la place de tes continue tu fais ça :

Code :
  1. if(courbeXMax.getXMax().getX() <= courbe.getXMax().getX()) courbeXMax = courbe;
  2. if(courbeYMax.getYMax().getY() <= courbe.getYMax().getY()) courbeYMax = courbe;
  3. if(courbeXMin.getXMin().getX() >= courbe.getXMin().getX()) courbeXMin = courbe;
  4. if(courbe.getYMin().getY() >= courbe.getYMin().getY()) courbeYMin = courbe;


 
tes continue zappent forcément les affichages, donc il faut les virer, et inverses le test (> devient <=, etc.)


---------------
TReVoR - http://dev.arqendra.net - http://info.arqendra.net
n°1283265
masklinn
í dag viðrar vel til loftárása
Posté le 13-01-2006 à 19:59:17  profilanswer
 

trevor a écrit :

et inverses le test (> devient <=, etc.)


Ou alors il remplace if(condition) par if(!condition) [:spamafote]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1283330
trevor
laissez la vie vous étonner...
Posté le 13-01-2006 à 21:16:40  profilanswer
 

aussi oui :)


---------------
TReVoR - http://dev.arqendra.net - http://info.arqendra.net

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  probleme de bloucle for...

 

Sujets relatifs
Problème d'objet instancié?[vbs] Problème de lecture de paramètres
Problème Aff/cacher un div : l'image ok sous FF mais pas sur IEProbleme avec l'utilisation du port seirie et javax.comm
[visual c++ 6] problème de compil' sous XP homeprobléme MySql et visual.net 2003
Probleme execution script python sitemap googleJava: Probleme de Cast
[Sockets]Problème étrange[WEBLOGIC] probleme de déploiement d'un ear
Plus de sujets relatifs à : probleme de bloucle for...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR