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

Fermé
cireek Messages postés 11 Date d'inscription mardi 30 avril 2019 Statut Membre Dernière intervention 27 mai 2019 - Modifié le 17 mai 2019 à 19:00
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 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:

2 réponses

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 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
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 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);
0
cireek Messages postés 11 Date d'inscription mardi 30 avril 2019 Statut Membre Dernière intervention 27 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.
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015 > cireek Messages postés 11 Date d'inscription mardi 30 avril 2019 Statut Membre Dernière intervention 27 mai 2019
20 mai 2019 à 18:42
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 !");
}
0
cireek Messages postés 11 Date d'inscription mardi 30 avril 2019 Statut Membre Dernière intervention 27 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.
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015 > cireek Messages postés 11 Date d'inscription mardi 30 avril 2019 Statut Membre Dernière intervention 27 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...
0
Je sais pas
0