Partage
  • Partager sur Facebook
  • Partager sur Twitter

Comment déterminer si mon entrée est un nombre ?

Puis m'en servir dans une boucle If

Sujet résolu
    26 mars 2017 à 21:26:52

    Bonjour à tous, 

    Je suis en train de réaliser un programme de gestion utile à la location de véhicules utilitaires dans le cadre d'un projet Java de mon école.

    Dans la notation, la prise en compte des exceptions est très importante et il se trouve que j'ai un soucis pour en gérer une. Voici mon problème :

    Je pose la question "combien de véhicules vous faut il ?" et attend donc une réponse sous forme de chiffre/nombre. Bien sur le programme s'arrête instantanément avec l'exception "java.util.InputMismatchException" si je rentre autre chose qu'un integer.

    Voici l'erreur :

    Screen de l'erreur

    Voici le code de cette partie là (je peux envoyer tout le code si besoin) :

    System.out.println("Please enter the quantity of car you want to rent");
                    int car_num;
                    car_num=input.nextInt();
                    car[] car_renting=new car[car_num];
                    for(int i=1;i<=car_num;i++){
                        int num;
                        System.out.println("Please enter the first place you want to rent"+i+"The serial number of the car:");
                        num=input.nextInt();
                        car_renting[i-1]=car[num-1];
                    }

    Je me suis déjà renseigné sur d'autres postes et autres sites de Java, l'utilisation du parseInt ou instanceof etait recommandé et j'ai donc essayé ceci :

    System.out.println("Please enter the quantity of car you want to rent");
                    int car_num;
                    car_num = input.nextInt();
                    if(isAnInteger(car_num) == true ){
                        car[] car_renting=new car[car_num];
                        for(int i=1;i<=car_num;i++){
                            int num;
                            System.out.println("Please enter the first place you want to rent"+i+"The serial number of the car:");
                            num=input.nextInt();
                            car_renting[i-1]=car[num-1];
                        }
                    }
                    else{
                        throw new WrongInput(); 
                    }
                    

    Avec la méthode isAnInteger récupérée sur un autre post (que je remercie) et l'Exception "WrongInput" créée comme telle :

        class WrongInput extends Exception{ 
            public WrongInput(){
                System.out.println("Merci d'entrer un chiffre uniquement");
            }  
        }
    
        public boolean isAnInteger(int chaine) {
    		try {
    			Integer.parseInt(chaine);
    		} catch (NumberFormatException e){
    			return false;
    		}
     
    		return true;
    	}


    Mais on me dit que je ne peux convertir des integer en String et j'ai un peu de mal à comprendre où aller pour me sortir de cette affaire....

    Et du coup mon objectif est donc d'entrer dans ma boucle If si jamais l'utilisateur a bien renseigné un Integer et que tout le reste soit traité comme Exception et que le logiciel demande de rentrer une nouvelle fois une valeur et cette fois ci l'utilisateur rentrera du coup une valeur qui l'amènera à l'étape suivante ! 

    J'espère avoir été suffisamment clair, un grand merci par avance pour votre aide !

    Bonne soirée !

    -
    Edité par StanislasFrancin 26 mars 2017 à 21:33:48

    • Partager sur Facebook
    • Partager sur Twitter
      27 mars 2017 à 0:35:35

      Salut. Tu dois faire la lecture en tant que chaine de caractères.

      System.out.println("Please enter the quantity of car you want to rent");
              int car_num;
              String str;
              Scanner input = new Scanner(System.in);
              str = input.nextLine();
      
              try 
              {
                  car_num = Integer.parseInt(str);
                  //ta boucle for ici
              } 
              
              catch (NumberFormatException ex) 
              {
                  System.out.println("Veuillez saisir un nombre");
              }



      -
      Edité par kulturman 27 mars 2017 à 0:51:27

      • Partager sur Facebook
      • Partager sur Twitter
        27 mars 2017 à 12:38:44

        Merci beaucoup !

        L'idée fonctionne, j'ai reçu de l'aide physique d'un ami en plus et le code final ressemble à ça :

        private int isInt(String str){
                try{
                    int num = Integer.parseInt(str);
                    if(num > 0){
                        return num;
                    }else{
                        System.out.println(RED+"Please enter a positive value"+RESET);
                        return -1;
                    }
                }catch(NumberFormatException ex){
                    System.out.println(RED+"PLease enter a correct number"+RESET);
                    return -1;
                }

        Et du coup ça gère aussi que la valeur rentrée est bien positive. 



        • Partager sur Facebook
        • Partager sur Twitter
          27 mars 2017 à 13:53:55

          Bonjour,

          C'est juste un détail mais je trouve le nom de la méthode mal choisi. La méthode ne dit pas "si la chaine est un entier". Elle retourne la valeur de l'entier ou -1 en cas d'erreur. asPositiveInt ou toPositiveInt me sembleraient plus parlants.

          • Partager sur Facebook
          • Partager sur Twitter

          Comment déterminer si mon entrée est un nombre ?

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown