Quel est le souci sur ma boucle et la variable f ?

Résolu/Fermé
Pulsar360 Messages postés 114 Date d'inscription lundi 12 novembre 2012 Statut Membre Dernière intervention 29 août 2018 - Modifié par NHenry le 30/01/2016 à 16:40
Pulsar360 Messages postés 114 Date d'inscription lundi 12 novembre 2012 Statut Membre Dernière intervention 29 août 2018 - 30 janv. 2016 à 18:59
Bonjour,
Je voudrais lancer un calcule automatique et faire afficher les résultats, malheureusement quand je le lance je n'ai qu'une seul ligne qui s'affiche et la boucle ne prend pas fin, un peu comme si la variable f n’étant jamais incrémenter
ou comme si elle reprenez la valeur de zéro.


public class Atchoom {

 public static void main(String[] args) {
  
  //x=nbr(s) de caps  u=prix du ou des caps(s)  b=le reste
  //f=nbr(s) de semaine(s) b1=reste du calcule precedent
  
  double x = 10; double b = 0; double u = 0; double f=0;
  double g,y,b1;
  do {
   g = (x*2.13);
   y = (g+b);
   while (y>25) {
    u=u+25;
    x++;
   }
   b1 = b;
   b = (y-u);
   f++;
   System.out.println("Semaine "+f+" : "+x+" x 2.13 = "+g+" + "+b1+" = "+y+" - "+u+" = "+b);
   System.out.println(f);
  }while (f<4);
  System.out.println("Fin");
 }
}




Merci pour votre aide !!!




EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

1 réponse

Utilisateur anonyme
30 janv. 2016 à 17:17
Bonjour

À mon humble avis, f est bien incrémenté, mais la boucle qui ne prend jamais fin est celle-ci :
   while (y>25) {
    u=u+25;
    x++;
   }

Si y est supérieur à 25, tu rentres dans la boucle et tu n'en sors jamais puisque rien ne vient modifier la valeur de y.
Or, lors de la seconde itération de ta boucle do, y est supérieur à 25.
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
30 janv. 2016 à 18:00
C'est même exactement ça !
Au premier tour y=21.3 donc pas de problème, mais après y=42.6...

Remarque : mettre un commentaire comme ceci c'est bien :
//x=nbr(s) de caps  u=prix du ou des caps(s)  b=le reste
//f=nbr(s) de semaine(s) b1=reste du calcule precedent
Mais ce serait encore mieux si les variables étaient directement bien nommées. Comme ça le code serait bien plus lisible.

De plus, contrairement à d'autres langages il n'est pas du tout obligatoire de déclarer toutes les variables au début du code. Il est même plus efficace de les mettre au plus proche de leur utilisation.

Enfin, une boucle avec cette structure :
double f = 0;
do {
    // instructions
    f++;
}
while (f < 4);
Devrait être remplacé comme ceci :
for (int f = 0, f < 4; f++) {
    // instructions
}
De manière générale, la boucle do/while est assez rare en Java.
0
Pulsar360 Messages postés 114 Date d'inscription lundi 12 novembre 2012 Statut Membre Dernière intervention 29 août 2018 10
30 janv. 2016 à 18:59
Merci pour votre aide !!

J'ai donc pu réussir ce que je souhaiter.

Résultat ci-dessous :

public class Atchoom {

public static void main(String[] args) {

//x=nbr(s) de caps u=prix du ou des cap(s) b=le reste
//f=nbr(s) de semaine(s) b1=reste du calcule precedent

int x = 10; double b = 0; double u = 0; int f=0;
double g,y,g2; double y1=0; double b1=0;int x1=0; int c=0;

while(f<17) {
g = (x*2.13);
y = (g+b1);
x1=x;
if (y>25){
y1=y;
while (y>25){
u=u+25;
c++;
x++;
y=y-25;
b=y;
}
}
else{
y1=y;
b=y;
}
f++;
System.out.println("Semaine "+f+" : "+x1+" x 2.13 = "+g+" + "+b1+" = "+y1+" - "+u+" = "+b+" (+"+c+"caps).");
System.out.println();b1=b;u=0;c=0;
}
System.out.println("Fin");
}
}

Il me reste a faire en sorte d'avoir seulement deux chiffre apres la virgule et ça sera parfait.

Merci bien.
0