Tester si un paramètre est de type entier
Sken
-
Sken -
Sken -
Bonsoir,
Je cherche à réaliser le constructeur de la classe Personne qui initialise les attributs String nom, prénom, adresse et carte d'identité ainsi que le long téléphone à partir de valeurs saisies au clavier. Si le téléphone n'est pas un entier positif, je dois générer une exception du type TéléphoneInvalide.
J'ai essayé de la façon suivante :
import java.io.IOException;
import java.io.*;
import java.util.*;
import java.awt.*;
public class Personne {
// Déclaration des attributs
protected String nom;
protected String prénom;
protected String adresse;
protected String cartedidentité;
protected long téléphone;
// Constructeur de la classe Personne
public Personne(String n, String p, String a, String c, long t){
this.nom=n;
this.prénom=p;
this.adresse=a;
this.cartedidentité=c;
try{
if(t == Integer.parseInt(StdInput.readLine()))
this.téléphone=t;
else throw new TéléphoneInvalide();
}
catch(IOException e){
System.out.println("Ceci n'est pas un entier");
}
catch(TéléphoneInvalide e){
System.out.println("Le téléphone saisi n'est pas un entier");
}
}
Mais lorsque je teste et je ne rentre pas un entier je reçois seulement l'exception classique "Bad Integer" et le "blabla" de la machine et non le traitement que j'impose.
Si quelqu'un a une idée de l'origine du problème.
Merci d'avance.
Je cherche à réaliser le constructeur de la classe Personne qui initialise les attributs String nom, prénom, adresse et carte d'identité ainsi que le long téléphone à partir de valeurs saisies au clavier. Si le téléphone n'est pas un entier positif, je dois générer une exception du type TéléphoneInvalide.
J'ai essayé de la façon suivante :
import java.io.IOException;
import java.io.*;
import java.util.*;
import java.awt.*;
public class Personne {
// Déclaration des attributs
protected String nom;
protected String prénom;
protected String adresse;
protected String cartedidentité;
protected long téléphone;
// Constructeur de la classe Personne
public Personne(String n, String p, String a, String c, long t){
this.nom=n;
this.prénom=p;
this.adresse=a;
this.cartedidentité=c;
try{
if(t == Integer.parseInt(StdInput.readLine()))
this.téléphone=t;
else throw new TéléphoneInvalide();
}
catch(IOException e){
System.out.println("Ceci n'est pas un entier");
}
catch(TéléphoneInvalide e){
System.out.println("Le téléphone saisi n'est pas un entier");
}
}
Mais lorsque je teste et je ne rentre pas un entier je reçois seulement l'exception classique "Bad Integer" et le "blabla" de la machine et non le traitement que j'impose.
Si quelqu'un a une idée de l'origine du problème.
Merci d'avance.
1 réponse
-
1) t est de type long, Integer.parseInt(StdInput.readLine()) est de type Integer, il peut y avoir un problème. De même il faut se méfier de l'opérateur == qui compare deux objets mais pas leur valeur, contrairement à la méthode equals qui est faite pour ça.
2) si Integer.parseInt ne fonctionne pas elle renvoit java.lang.NumberFormatException, mais tu ne fais pas de catch pour ce cas donc du coup ça peut planter quand même...
Le catch d'IOException ne sert à rien car rien dans ton code ne peut le générer.
try { if (Long.parseLong(StdInput.readLine().equals(t)) this.téléphone = t; else throw new TéléphoneInvalide(); } catch (NumberFormatException e) // Long.parseLong { System.out.println("Ceci n'est pas un entier"); } catch (TéléphoneInvalide e) { System.out.println("L'entier saisi n'est pas positif."); }
Remarque : Avec Scanner tu peux directement faire nextLong, ce qui t'évite de faire un parseLong sur ton NextLine, mais dans ce cas on n'aura plus NumberFormatException, mais InputMismatchException .-
-
-
-
-
Autant pour moi :
1) parseLong renvoie un élément de type long (et non pas Long), donc equals n'est pas défini, pour le coup il faudra donc bien utiliser ==
2) je pensais que StdInput était un Scanner mais en fait non (j'ai confondu readLine avec nextLine), donc tu vas bien avoir un IOException a récupérer au cas où tu ne peux pas lire.
try { if (Long.parseLong(StdInput.readLine())==t) this.téléphone = t; else throw new TéléphoneInvalide(); } catch (IOException e) { System.out.println("Impossible de lire les données."); } catch (NumberFormatException e) // Long.parseLong { System.out.println("Ceci n'est pas un entier"); } catch (TéléphoneInvalide e) { System.out.println("L'entier saisi n'est pas positif."); }
-