Tester si un paramètre est de type entier

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.

A voir également:

1 réponse

KX Messages postés 19031 Statut Modérateur 3 020
 
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 .
1
Sken
 
Merci Beaucoup pour cette solution mais je voulais savoir s'il y a un package à importer pour la méthode parseLong ? Parce que mon compilo ne la connait pas...
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Je viens de m'apercevoir que j'avais oublié une parenthèse, ça vient peut-être de ça, il fallait lire :
if (Long.parseLong(StdInput.readLine()).equals(t))
L'import c'est java.lang.Long, mais normalement il n'y en a pas besoin...
0
Sken
 
J'avais corrigé la parenthèse mais même avec l'import j'obtiens cette erreur :

Personne.java:38: cannot find symbol
symbol: method parseLong(boolean)
location: class java.lang.Long

if(Long.parseLong(StdInput.readLine().equals(t)))

1 error.
0
Sken
 
Non en fait après correction de la parenthèse il me dit :

long cannot be dereferenced
0
KX Messages postés 19031 Statut Modérateur 3 020
 
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.");
}
0