Quel est le souci sur ma boucle et la variable f ?
Résolu
Pulsar360
Messages postés
133
Statut
Membre
-
Pulsar360 Messages postés 133 Statut Membre -
Pulsar360 Messages postés 133 Statut Membre -
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.
Merci pour votre aide !!!
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. |
A voir également:
- Quel est le souci sur ma boucle et la variable f ?
- Sfc /scannow /f /r - Guide
- Le fichier contient un programme écrit en python. le programme construit un mot secret mais il ne l'affiche pas. modifiez ce programme afin que à chaque itération de la boucle : la variable a augmente de 2 la variable b diminue de 1 ajoutez une instruction pour faire afficher le mot secret construit. quel est ce mot secret ? ✓ - Forum Python
- Définir des variables par itération ✓ - Forum Python
- Xiaomi s'éteint tout seul et se rallume en boucle - Forum Xiaomi
- Télé samsung s'éteint et se rallume en boucle - Forum Téléviseurs
1 réponse
Bonjour
À mon humble avis, f est bien incrémenté, mais la boucle qui ne prend jamais fin est celle-ci :
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.
À 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.
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 :
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.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.