[Java] Integer.parseInt [Résolu/Fermé]

Signaler
-
 zahir -
Bonjour,

J'essaye d'exécuter ce petit code de conversion des chaines de caractères en entiers, mais il m'affiche une erreur que je ne peux pas corriger.
public class Conversion {
   // point d'entrée général
   public static void main (String[] args) {
	String s1 = "1";
	args[0]=s1;
	args[1]=s2;
	String s2 = "2";
	int i=Integer.parseInt(args[0])+ Integer.parseInt(args[1]);
      System.out.println (i+" ") ;
   }//End main
}


Merci de m'avoir aider :)

P.S. je débute en Kawa ;)
A voir également:

8 réponses

Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
852
Bonjour,

La fonction java parseInt de la classe Integer soulève une exceptin de type NumberFormatException il me semble.
Si la chaine que tu tente de parser n'est pas un numérique, cette exception est levée pour signaler qu'il ne s'agit pas d'un numérique. Il faut donc que tu gère ce type d'erreur en la catchant. Si tu pose cette question j'imagine que tu ne sais pas ce que c'est encore que la gestion des erreurs en java, voici donc le code correctif pour pouvoir gérer ton erreur :

public class Conversion {
   // point d'entrée général
   public static void main (String[] args) {
	String s1 = "1";
	String s2 = "2";
        // --- Retrieve program arguments
        if ( args.length > 0 )
	    s1 = args[0];
        if ( args.length > 1 )
	    args[1]=s2;
        int i = 0;
        try{
             i=Integer.parseInt(args[0])+ Integer.parseInt(args[1]);
             System.out.println ("Nombre calculé : "+i) ;
        }catch (NumberFormatException e){
            System.out.println("Error : "+e.getMessage());
        }
   }//End main
}



ps: erreur en plus : tu attribue la valeur d'une variable non déclarée (s2) à ton tableau ce qui cause certainement une NullPointerException. De plus c'est généralement l'inverse qu'il faut faire... mettre la variable de ton tableau d'argument dans ta variable locale pour ensuite travailler avec sa valeur. Si tu souhaite initialiser cette variable s2 avec une valeur par défaut, fait le avant de récupérer la valeur dans ton tableau d'argument ;)
18
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
852
Bien, j'avais glisser quelques erreurs pour voir si tu avais compris le principe mais apparemment non ^^
Ton erreur est due au fait que tu ne passe aucun argument en paramètre à ton programme et que tu tente de lire des arguments (dans un tableau de taille nulle donc = non rempli) lorsque tu appelle la méthode parseInt.

Bref, voici le programme dans la mauvaise version (erreur en gras) :
public class Conversion {
   // point d'entrée général
   public static void main (String[] args) {
	String s1 = "1";
	String s2 = "2";
        // --- Retrieve program arguments
        if ( args.length > 0 )
	    s1 = args[0];
        if ( args.length > 1 )
	    args[1]=s2;
        int i = 0;
        try{
             i=Integer.parseInt(args[0])+ Integer.parseInt(args[1]);
             System.out.println ("Nombre calculé : "+i) ;
        }catch (NumberFormatException e){
            System.out.println("Error : "+e.getMessage());
        }
   }//End main
}


Et dans la bonne version :
public class Conversion {
   // point d'entrée général
   public static void main (String[] args) {
	String s1 = "1";
	String s2 = "2";
        // --- Retrieve program arguments
        if ( args.length > 0 )
	    s1 = args[0];
        if ( args.length > 1 )
	    s2 = args[1];
        int i = 0;
        try{
             i=Integer.parseInt(s1)+ Integer.parseInt(s2);
             System.out.println ("Nombre calculé : "+i) ;
        }catch (NumberFormatException e){
            System.out.println("Error : "+e.getMessage());
        }
   }//End main
}


Sauf oubli de ma part il ne devrait pas y avoir d'erreur (je n'ai pas testé)


Resalut,

J'ai exécuté le programme, mais il m'a affichée cette erreur :

Exception in thread "main" java.lang.Array.IndexOutofBoundsException : 0 at Conversion.main(Conversion.java:13)

Merci encore une fois :)
salut dans ton programme voici ce qui ne marche pas: déja c'est ta variable s2?ca c'est une erreur puis ca te sert à rien de donner des valeur à args[0] et args[1] ce sont des valeurs dont tu dois les entrer par la ligne de commande donc c'est inutile. voila en vrai ce que tu dois avoir pour ton petit programme.tu as besoin de 4 à 5 lignes maxi pour ton programme pas besoin de beaucoup de choses.
public class Conversion {
// point d'entrée général
public static void main (String[] args) {
int i=Integer.parseInt(args[0])+ Integer.parseInt(args[1]);
System.out.println (i+" ") ;
}//End main
}
et rien d'autres.
c'est bien tous les programmes de kij_82 mais je vois que tu es debutante donc c'est un peu difficile pour toi de comprendre.
Bon courage.
Je suis nouveau en programmation java et je suis confronté au même problème. J'ai essayé ce que vous me dites ici mais il me dit toujours la même chose: Exception in thread main....
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
852
A priori si elle a voulu traiter les argument c'est qu'elle veut pouvoir les utiliser.
Bien sur il y a des valeurs par défaut, mais si les arguments sont renseigner il faut les prendre (par exemple lancement de la classe java en ligne de commande ou depuis un autre programme avec ses propres valeurs)

Par contre je ne pense pas qu'il faille pour autant éliminer les lignes de code que j'ai mis plus haut puisqu'alors les exceptions ne sont plus gérées correctement. Si les arguments ne sont pas renseignés par exemple, ton programme échouera avec une NullPointerException, ce qui n'est pas bon.

Dernière remarque : un bon programme n'est pas un programme ou il y a le moins de ligne de code pour effectuer le travail, mais un programme géré correctement (gestion des cas d'erreur notamment)
je suis tout à fait d'accord avec toi mais je disais seulement que pour une debutante tu vois la notion de gestion d'exception ou un programme avec plusieurs lignes ne se comprend pas tres facillement il faudrait just qu'elle sache à quoi ca lui sert la notion de Integer.parseInt(...); après elle pourra l'utiliser comme elle le veux. imagine toi qu'elle ne sais pas ce qui signifie Integer.parseInt(...) et tu lui parle deja de la gestion des exceptions c'est énorme moi on m'a appris java par des choses simples avant de me parler de la gestion des exceptions. ca viens après je suis desolé.
Bon c'est bien de discuter pour échanger les idées.
Bon courage.
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
852
C'est vrai, bonne remarque :) C'est vrai que j'ai parfois tendance à oublier la / les personnes qui sont en face

Salut kij_82 et ray_fab,

Je vous remercie de vos explications, ça me donne l'envie d'apprendre plus.

Bon week end :)
Salut, je pense que la cause de l'erreur c'est parce que vous n'avez pas déclarez préalablement la variable S2 avant de l'affecter à args [1] .
Bonne courage