Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème execution

Sujet résolu
    22 mai 2012 à 12:49:00

    Bonjour,

    J'ai un problème soit-disant connu lorsque je veux executer une classe en java ...
    Je me place dans le répertoire où se trouve la classe, puis je fais : java SommeN (SommeN étant le nom de la classe)
    Il apparaît un message :
    Exception in thread "main" java.lang.NumberFormatException: For input string: "" ...
    at java.lang.Integer.parseInt(Interger.java:504)
    ...

    Pouvez-vous m'aider svp? Ce serait sympa car je suis perdu, j'ai même regardé des topics mais ca ne m'a pas du tout aidé :S

    Merci

    --------------------------------------------

    Dsl je n'ai pas eu le temps de tout ré-écrire le message qui s'est affiché, je le ferai ce soir dès rentré chez moi.
    • Partager sur Facebook
    • Partager sur Twitter
      22 mai 2012 à 14:38:06

      En gros il te dit qu'il attend un Int et que tu lui passe un String
      • Partager sur Facebook
      • Partager sur Twitter
        22 mai 2012 à 14:39:42

        J'ai plutot l'impression que tu as fait un Integer.parseInt(X) mais que X est un string qui vaut "" et donc impossible à transformer en integer.
        • Partager sur Facebook
        • Partager sur Twitter
          22 mai 2012 à 14:48:25

          Si tu as essayé de lancer cette commande sans connaitre le code, n'attend-t-elle pas un paramettre :

          une somme est entre 2 chiffre, et donc ce message vient du fait que tu n'as pas donné les parametres attendus.
          • Partager sur Facebook
          • Partager sur Twitter
            22 mai 2012 à 15:04:05

            Donne nous ton code que l'on puisse faire autre chose que des suppositions ;)
            • Partager sur Facebook
            • Partager sur Twitter
            Le jour où Microsoft fera des choses qui ne plantent pas, ça sera des clous ...
              22 mai 2012 à 16:25:09

              Merci d'avoir répondu :)

              Mais ce n'est pas bizarre qu'il m'écrive des erreurs quand j'execute? Il ne devrait pas les écrire lorsque je compile? Car quand je compile je n'ai aucune erreur...
              Voilà mon code, qui n'est pas encore achevé :


              import java.util.Scanner;
              class SommeN
              {
              public static void main(String[] args)
              {
              String cc = new String();
              int dessus = 0;
              int dessous = 0;
              float moyenne = 0;
              int nb = Integer.parseInt(cc);
              Scanner sc = new Scanner(System.in);
              while(cc!="fin")
              {
              System.out.println("Entrez un nombre : (fin pour terminer)");
              cc = sc.next();
              dessus = dessus + nb;
              dessous = dessous + 1;
              }
              System.out.println("dessus :");
              System.out.println(dessus);
              System.out.println("dessous :");
              System.out.println(dessous);
              }
              }
              • Partager sur Facebook
              • Partager sur Twitter
                22 mai 2012 à 16:28:59

                je ne suis pas convaincu par l'utilisation de sc.next, c'est pas pour les char ca ?

                tu ne testes pas le type de ton entrée par ailleurs..?
                • Partager sur Facebook
                • Partager sur Twitter
                Google est le seul endroit où l'on peut tapper Chuck Norris !
                  22 mai 2012 à 16:35:39

                  System.out.println("Entrez un nombre : (fin pour terminer)");
                  cc = sc.next();
                  


                  Un nombre, donc pourquoi ne pas mettre un sc.nextInt() ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    22 mai 2012 à 16:46:34

                    Tu fais
                    String cc = new String(); // Donc cc = ""
                    ...
                    int nb = Integer.parseInt(cc); // parseInt("") pas un entier, d'où ton erreur
                    
                    • Partager sur Facebook
                    • Partager sur Twitter
                      22 mai 2012 à 17:03:59

                      Citation : Singe Batteur

                      je ne suis pas convaincu par l'utilisation de sc.next, c'est pas pour les char ca ?

                      tu ne testes pas le type de ton entrée par ailleurs..?



                      Si, justement au départ cc est une chaîne de caractères, ensuite je veux la transformer en nombre avec parseInt. C'est pour ça que je n'utilise pas sc.nextInt .


                      brubru, parseInt prend forcément comme paramètre un entier ? :S dsl je suis débutant ^^'


                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 mai 2012 à 17:35:45

                        Integer.parseInt prend en entier en paramètre (comme son nom l'indique).
                        Tu peux faire la même chose avec des doubles, des floats... :
                        Float.parseFloat("5.0001");
                        • Partager sur Facebook
                        • Partager sur Twitter
                          22 mai 2012 à 17:57:56

                          D'accord, mais à quoi sert cette méthode alors?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            22 mai 2012 à 18:08:14

                            Ah non, Integer.ParseInt prend bien un string et retourne un int

                            Bon pour faire simple, tu ne peux pas donner a Integer.parseInt une string vide (Ce n'est pas un nombre).
                            De plus ton code a un autre problème, il ne sortira jamais du while, pour comparer deux chaines il faut utilisé la methode equals de String.

                            Voici un code qui fonctionne:
                            public static void main(String args[]) throws InterruptedException {
                            
                            		String cc = ""; // pas besoin de faire un new String
                            		int dessus = 0;
                            		int dessous = 0;
                            		float moyenne = 0;
                            		int nb = 0; // On ne peux pas utiliser de parseInt avec une chaine vide, j'ai donc init a zero
                            		Scanner sc = new Scanner(System.in);
                            		while (!cc.equals("fin")) { // pas de != entre deux chaines
                            			System.out.println("Entrez un nombre : (fin pour terminer)");
                            			cc = sc.next();
                            			dessus += nb; // ecriture raccourcie de dessus = dessus + nb;
                            			dessous ++; // ecriture raccourcie de dessous = dessous + 1;
                            		}
                            		System.out.println("dessus :");
                            		System.out.println(dessus);
                            		System.out.println("dessous :");
                            		System.out.println(dessous);
                            }
                            
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Le jour où Microsoft fera des choses qui ne plantent pas, ça sera des clous ...
                              22 mai 2012 à 18:36:48

                              Ah d'accord je ne savais pas ...

                              Merci pour le code !

                              Mon problème en gros c'était à cause de la chaîne vide .
                              J'ai du mal en Java, je débute depuis peu ^^
                              • Partager sur Facebook
                              • Partager sur Twitter
                                22 mai 2012 à 18:47:33

                                Si tu as toutes les infos pour ton problème, passe ton sujet en résolu ;)
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Le jour où Microsoft fera des choses qui ne plantent pas, ça sera des clous ...
                                  22 mai 2012 à 19:48:47

                                  Voilà, merci à tous pour votre aide ! :)
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Anonyme
                                    22 mai 2012 à 20:11:19

                                    Dans le code fourni par hannibal.76, il manque le parseInt entre les lignes 11 et 12, sinon, nb va rester à 0. Cependant, si tu mets juste le parseInt, tu auras une erreur si tu mets autre chose qu'un nombre ("fin" fera planter le programme). Il faut donc s'occuper des exceptions. Ca donne

                                    // Code à ajouter
                                        cc = sc.next();
                                        boolean estUnNombre = true;
                                        try {
                                            nb = Integer.parseInt(cc);
                                        } catch (NumberFormatException e) { // Exécuté si cc ne représente pas un nombre
                                            estUnNombre = false;
                                        }
                                        if (estUnNombre) {
                                            dessus += nb; // ecriture raccourcie de dessus = dessus + nb;
                                            dessous ++; // ecriture raccourcie de dessous = dessous + 1;
                                        }
                                    
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      23 mai 2012 à 9:24:21

                                      T'inquiete, je le savais bien, mais le but est de le laisser découvrir ;)
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Le jour où Microsoft fera des choses qui ne plantent pas, ça sera des clous ...

                                      Problème execution

                                      × 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