Java - problème avec des calculs (virgules + exception)
Fermé
cireek
Messages postés11Date d'inscriptionmardi 30 avril 2019StatutMembreDernière intervention27 mai 2019
-
Modifié le 17 mai 2019 à 19:00
KX
Messages postés16733Date d'inscriptionsamedi 31 mai 2008StatutModérateurDernière intervention31 janvier 2024
-
27 mai 2019 à 14:16
Bonjour,
J'ai écrit un code de ce type en Java, mais je n'arrive pas à gérer le fait que la réponse du calcul peut-être avec virgule. Par exemple, pour une division, je ne peux pas mettre de nombre à virgule.
De plus, au moment où l'utilisateur entre un nombre à virgule en utilisant un point, cela ne fonctionne pas. Comment puis-je faire une exception pour cela?
Voici mon code:
package eac;
import java.util.Scanner;
import java.util.Random;
public class first
{
public static void main(String[] args)
{
//Etablissement des variables + inisialisation du scanner.
String nom;
int cpt,serie,totbnrep=0,totmvrep=0;
Scanner read = new Scanner(System.in);
System.out.println("Quel est votre nom?");
nom = read.nextLine();
System.out.println("Bonjour " + nom + ".");
System.out.println("----------------------------------");
System.out.println("Combien de fois voulez vous faire l'exercice?");
serie = read.nextInt();
for(cpt=0;cpt<serie;cpt++)
{
int A,B,bnrep=0,mvrep=0;
double reponse,C;
Random rand = new Random();
A = rand.nextInt(10)+1;
B = rand.nextInt(10)+1;
int calcul = rand.nextInt(4);
switch(calcul)
{
case 0:
{
while(bnrep<1)
{
System.out.println("----------------------------------");
System.out.println(" ");
System.out.println("Voici le calcul:");
if(A>=B)
{
C = A+B;
System.out.println("Quel est le résultat de: "+ A +" + "+ B +" ?");
reponse = read.nextDouble();
if(reponse==C)
{
bnrep=bnrep+1;
System.out.println("Bonne réponse!");
}
else
{
mvrep=mvrep+1;
System.out.println("Mauvaise réponse!");
}
System.out.println(" ");
}
else
{
C = B+A;
System.out.println("Quel est le résultat de: "+ B +" + "+ A +" ?");
reponse = read.nextDouble();
if(reponse==C)
{
bnrep=bnrep+1;
System.out.println("Bonne réponse!");
}
else
{
mvrep=mvrep+1;
System.out.println("Mauvaise réponse!");
}
System.out.println(" ");
}
if (bnrep<1)
{
System.out.println("----------------------------------");
System.out.println("Veuillez recommencer.");
}
}
break;
}
case 1:
{
while(bnrep<1)
{
System.out.println("----------------------------------");
System.out.println(" ");
System.out.println("Voici le calcul:");
if(A>=B)
{
C = A-B;
System.out.println("Quel est le résultat de: "+ A +" - "+ B +" ?");
reponse = read.nextDouble();
if(reponse==C)
{
bnrep=bnrep+1;
System.out.println("Bonne réponse!");
}
else
{
mvrep=mvrep+1;
System.out.println("Mauvaise réponse!");
}
System.out.println(" ");
}
else
{
C = B-A;
System.out.println("Quel est le résultat de: "+ B +" - "+ A +" ?");
reponse = read.nextDouble();
if(reponse==C)
{
bnrep=bnrep+1;
System.out.println("Bonne réponse!");
}
else
{
mvrep=mvrep+1;
System.out.println("Mauvaise réponse!");
}
System.out.println(" ");
}
if (bnrep<1)
{
System.out.println("----------------------------------");
System.out.println("Veuillez recommencer.");
}
}
break;
}
case 2:
{
while(bnrep<1)
{
System.out.println("----------------------------------");
System.out.println(" ");
System.out.println("Voici le calcul:");
if(A>=B)
{
C = A*B;
System.out.println("Quel est le résultat de: "+ A +" * "+ B +" ?");
reponse = read.nextDouble();
if(reponse==C)
{
bnrep=bnrep+1;
System.out.println("Bonne réponse!");
}
else
{
mvrep=mvrep+1;
System.out.println("Mauvaise réponse!");
}
System.out.println(" ");
}
else
{
C = B*A;
System.out.println("Quel est le résultat de: "+ B +" * "+ A +" ?");
reponse = read.nextDouble();
if(reponse==C)
{
bnrep=bnrep+1;
System.out.println("Bonne réponse!");
}
else
{
mvrep=mvrep+1;
System.out.println("Mauvaise réponse!");
}
System.out.println(" ");
}
if (bnrep<1)
{
System.out.println("----------------------------------");
System.out.println("Veuillez recommencer.");
}
}
break;
}
case 3:
{
while(bnrep<1)
{
System.out.println("----------------------------------");
System.out.println(" ");
System.out.println("Voici le calcul:");
if(A>=B)
{
C = A/B;
System.out.println("Quel est le résultat de: "+ A +" / "+ B +" ?");
reponse = read.nextDouble();
if(reponse==C)
{
bnrep=bnrep+1;
System.out.println("Bonne réponse!");
}
else
{
mvrep=mvrep+1;
System.out.println("Mauvaise réponse!");
}
System.out.println(" ");
}
else
{
C = B/A;
System.out.println("Quel est le résultat de: "+ B +" / "+ A +" ?");
reponse = read.nextDouble();
if(reponse==C)
{
bnrep=bnrep+1;
System.out.println("Bonne réponse!");
}
else
{
mvrep=mvrep+1;
System.out.println("Mauvaise réponse!");
}
System.out.println(" ");
}
if (bnrep<1)
{
System.out.println("----------------------------------");
System.out.println("Veuillez recommencer.");
}
}
break;
}
}
totbnrep=totbnrep+bnrep;
totmvrep=totmvrep+mvrep;
}
read.close();
System.out.println("----------------------------------");
System.out.println(" ");
System.out.println("Merci d'avoir participé " + nom + " !");
System.out.println(" ");
System.out.println("Total de bonnes réponses: "+totbnrep);
System.out.println("Total de mauvaises réponses: "+totmvrep);
}
}
A voir également:
Java - problème avec des calculs (virgules + exception)
Reivax962
Messages postés3671Date d'inscriptionjeudi 16 juin 2005StatutMembreDernière intervention11 février 20211 011 17 mai 2019 à 14:38
Bonjour,
A et B étant des entiers, toute opération arithmétique entre les deux fournit un résultat entier.
Il faut en caster un des deux en double en faisant l'opération.
C = B/(double)A;
Xavier
KX
Messages postés16733Date d'inscriptionsamedi 31 mai 2008StatutModérateurDernière intervention31 janvier 20243 015 17 mai 2019 à 19:43
Bonjour,
Pour la deuxième question : "au moment où l'utilisateur entre un nombre à virgule en utilisant un point, cela ne fonctionne pas", c'est normal. Par définition, un nombre à virgule s'écrit avec une virgule !
Ce sont les anglais qui écrivent avec des points, dans ce cas il faudrait forcer le Scanner à travailler en anglais.
read.useLocale(Locale.ENGLISH);
cireek
Messages postés11Date d'inscriptionmardi 30 avril 2019StatutMembreDernière intervention27 mai 2019 20 mai 2019 à 08:34
Pour les entiers, ça fonctionne. Grand merci!
En ce qui concerne les nombres à virgule, je ne veux pas que cela me les change en points, mais que je reçoive un message disant que je ne peux pas utiliser de points, mais des virgules, et que cela recommence le même calcul qu'auparavant. Je comprends pas trop les exceptions, mais c'est elles que je voudrais introduire dans mon code.
KX
Messages postés16733Date d'inscriptionsamedi 31 mai 2008StatutModérateurDernière intervention31 janvier 20243 015
>
cireek
Messages postés11Date d'inscriptionmardi 30 avril 2019StatutMembreDernière intervention27 mai 2019 20 mai 2019 à 18:42
try {
reponse = read.nextDouble();
} catch (InputMismatchException e) {
System.out.println("Vous devez entrer un nombre à virgule !");
}
cireek
Messages postés11Date d'inscriptionmardi 30 avril 2019StatutMembreDernière intervention27 mai 2019 Modifié le 24 mai 2019 à 11:29
package eac;
import java.util.Scanner;
import java.util.InputMismatchException;
import java.util.Random;
public class first
{
public static void main(String[] args)
{
//Etablissement des variables + inisialisation du scanner.
String nom;
int cpt,serie,totbnrep=0,totmvrep=0;
Scanner read = new Scanner(System.in);
System.out.println("Quel est votre nom?");
nom = read.nextLine();
System.out.println("Bonjour " + nom + ".");
System.out.println("----------------------------------");
System.out.println("Combien de fois voulez vous faire l'exercice?");
serie = read.nextInt();
for(cpt=0;cpt<serie;cpt++)
{
int A,B,bnrep=0,mvrep=0;
double reponse,C;
Random rand = new Random();
A = rand.nextInt(10)+1;
B = rand.nextInt(10)+1;
int calcul = rand.nextInt(4);
switch(calcul)
{
case 0:
{
while(bnrep<1)
{
System.out.println("----------------------------------");
System.out.println(" ");
System.out.println("Voici le calcul:");
/////////////////////////////////// PROBLEME - REBOOT A L'INFINI ////////////////////////////////////
try
{
if(A>=B)
{
C = A+B;
System.out.println("Quel est le résultat de: "+ A +" + "+ B +" ?");
reponse = read.nextDouble();
if(reponse==C)
{
bnrep=bnrep+1;
System.out.println("Bonne réponse!");
}
else
{
mvrep=mvrep+1;
System.out.println("Mauvaise réponse!");
}
System.out.println(" ");
}
else
{
C = B+A;
System.out.println("Quel est le résultat de: "+ B +" + "+ A +" ?");
reponse = read.nextDouble();
if(reponse==C)
{
bnrep=bnrep+1;
System.out.println("Bonne réponse!");
}
else
{
mvrep=mvrep+1;
System.out.println("Mauvaise réponse!");
}
System.out.println(" ");
}
}
catch(InputMismatchException e)
{
System.out.println("Vous devez entrer un nombre à virgule !");
}
if (bnrep<1)
{
System.out.println("----------------------------------");
System.out.println("Veuillez recommencer.");
}
/////////////////////////////////// FIN ///////////////////////////////////
}
break;
}
case 1:
{
while(bnrep<1)
{
System.out.println("----------------------------------");
System.out.println(" ");
System.out.println("Voici le calcul:");
if(A>=B)
{
C = A-B;
System.out.println("Quel est le résultat de: "+ A +" - "+ B +" ?");
reponse = read.nextDouble();
if(reponse==C)
{
bnrep=bnrep+1;
System.out.println("Bonne réponse!");
}
else
{
mvrep=mvrep+1;
System.out.println("Mauvaise réponse!");
}
System.out.println(" ");
}
else
{
C = B-A;
System.out.println("Quel est le résultat de: "+ B +" - "+ A +" ?");
reponse = read.nextDouble();
if(reponse==C)
{
bnrep=bnrep+1;
System.out.println("Bonne réponse!");
}
else
{
mvrep=mvrep+1;
System.out.println("Mauvaise réponse!");
}
System.out.println(" ");
}
if (bnrep<1)
{
System.out.println("----------------------------------");
System.out.println("Veuillez recommencer.");
}
}
break;
}
case 2:
{
while(bnrep<1)
{
System.out.println("----------------------------------");
System.out.println(" ");
System.out.println("Voici le calcul:");
if(A>=B)
{
C = A*B;
System.out.println("Quel est le résultat de: "+ A +" * "+ B +" ?");
reponse = read.nextDouble();
if(reponse==C)
{
bnrep=bnrep+1;
System.out.println("Bonne réponse!");
}
else
{
mvrep=mvrep+1;
System.out.println("Mauvaise réponse!");
}
System.out.println(" ");
}
else
{
C = B*A;
System.out.println("Quel est le résultat de: "+ B +" * "+ A +" ?");
reponse = read.nextDouble();
if(reponse==C)
{
bnrep=bnrep+1;
System.out.println("Bonne réponse!");
}
else
{
mvrep=mvrep+1;
System.out.println("Mauvaise réponse!");
}
System.out.println(" ");
}
if (bnrep<1)
{
System.out.println("----------------------------------");
System.out.println("Veuillez recommencer.");
}
}
break;
}
case 3:
{
while(bnrep<1)
{
System.out.println("----------------------------------");
System.out.println(" ");
System.out.println("Voici le calcul:");
if(A>=B)
{
C = A/(double)B;
System.out.println("Quel est le résultat de: "+ A +" / "+ B +" ?");
reponse = read.nextDouble();
if(reponse==C)
{
bnrep=bnrep+1;
System.out.println("Bonne réponse!");
}
else
{
mvrep=mvrep+1;
System.out.println("Mauvaise réponse!");
}
System.out.println(" ");
}
else
{
C = B/(double)A;
System.out.println("Quel est le résultat de: "+ B +" / "+ A +" ?");
reponse = read.nextDouble();
if(reponse==C)
{
bnrep=bnrep+1;
System.out.println("Bonne réponse!");
}
else
{
mvrep=mvrep+1;
System.out.println("Mauvaise réponse!");
}
System.out.println(" ");
}
if (bnrep<1)
{
System.out.println("----------------------------------");
System.out.println("Veuillez recommencer.");
}
}
break;
}
}
totbnrep=totbnrep+bnrep;
totmvrep=totmvrep+mvrep;
}
read.close();
System.out.println("----------------------------------");
System.out.println(" ");
System.out.println("Merci d'avoir participé " + nom + " !");
System.out.println(" ");
System.out.println("Total de bonnes réponses: "+totbnrep);
System.out.println("Total de mauvaises réponses: "+totmvrep);
}
}
Cela reboot à l'infini.
KX
Messages postés16733Date d'inscriptionsamedi 31 mai 2008StatutModérateurDernière intervention31 janvier 20243 015
>
cireek
Messages postés11Date d'inscriptionmardi 30 avril 2019StatutMembreDernière intervention27 mai 2019 Modifié le 24 mai 2019 à 13:49
Je t'invite à complètement retravailler ton code, tu as des copier-coller de partout, il faudrait faire des méthodes génériques plutôt que de faire 8 fois la même chose !
Parce que si tu as un bug uniquement sur une partie du code et que les autres fonctionnent alors que ce sont des copier-coller, ça va être compliqué de gérer tes modifications de manières propres s'il faut les multiplier par 8 à chaque fois...
17 mai 2019 à 19:43
Pour la deuxième question : "au moment où l'utilisateur entre un nombre à virgule en utilisant un point, cela ne fonctionne pas", c'est normal. Par définition, un nombre à virgule s'écrit avec une virgule !
Ce sont les anglais qui écrivent avec des points, dans ce cas il faudrait forcer le Scanner à travailler en anglais.
20 mai 2019 à 08:34
En ce qui concerne les nombres à virgule, je ne veux pas que cela me les change en points, mais que je reçoive un message disant que je ne peux pas utiliser de points, mais des virgules, et que cela recommence le même calcul qu'auparavant. Je comprends pas trop les exceptions, mais c'est elles que je voudrais introduire dans mon code.
20 mai 2019 à 18:42
Tu peux donc faire :
Modifié le 24 mai 2019 à 11:29
Cela reboot à l'infini.
Modifié le 24 mai 2019 à 13:49
Parce que si tu as un bug uniquement sur une partie du code et que les autres fonctionnent alors que ce sont des copier-coller, ça va être compliqué de gérer tes modifications de manières propres s'il faut les multiplier par 8 à chaque fois...