Menu

Java - problème avec des calculs (virgules + exception)

Messages postés
8
Date d'inscription
mardi 30 avril 2019
Statut
Membre
Dernière intervention
20 mai 2019
-
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);

        
    }

}
Afficher la suite 

Votre réponse

1 réponse

Messages postés
3386
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
20 mai 2019
1181
0
Merci
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és
15988
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
20 mai 2019
3554 -
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és
8
Date d'inscription
mardi 30 avril 2019
Statut
Membre
Dernière intervention
20 mai 2019
-
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és
15988
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
20 mai 2019
3554 > cireek
Messages postés
8
Date d'inscription
mardi 30 avril 2019
Statut
Membre
Dernière intervention
20 mai 2019
-
En cas d'erreur sur
read.nextDouble()
l'exception que tu obtiendras est de type
InputMismatchException
https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/util/Scanner.html#nextDouble()

Tu peux donc faire :
try {
    reponse = read.nextDouble();
} catch (InputMismatchException e) {
    System.out.println("Vous devez entrer un nombre à virgule !");
}
Commenter la réponse de Reivax962