IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

toString semble donner des données fausses


Sujet :

avec Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2021
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2021
    Messages : 58
    Points : 52
    Points
    52
    Par défaut toString semble donner des données fausses
    Bonjour,

    Je suis entrain apprendre les classe en java. Je rencontre un problème avec toString. Quand j'invoque que toString, elle m'affiche des données fausses. Le but d'exercice est de créer un système de enregistrement bancaire très basique. Dans lequel, il faut créer une méthode que permet de changer le numéro de téléphone. J'ai crée une méthode toString pour connaître l'état des variables , mais elle ne marche pas. Pouvez-vous me dire où se trouve mon erreur ?

    voici la classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    import java.util.*;
     
     
     class person1{
        private String nom;
        private String prenom;
        private int telephone;
        private int insee;
     
        public  person1(String nom1,String prenom1, int numero, int valeur)  {
    	nom = nom1;
    	prenom = prenom1;
    	telephone  = numero;
            insee  = valeur;
        }
     
        public void name1(String name){
    	nom = name;
        }
     
        public void subname1(String prnome1){
    	prenom = prnome1;
        }
        public void portable(int num1){
    	telephone = num1;
        }
     
        public void insee_1(int num_In){
    	insee = num_In;
        }
        public void chagement(int num_cha){
    	this.portable(num_cha);
        }
     
         public  String toString (){
    	 return "nom "+ telephone;
         }
     
    }

    Voici code main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    import java.util.*;
     
     
     
    public class test1{
        public static void main(String[] args){
    	Scanner demande = new Scanner(System.in);
    	person1 client_int  =  new person1("deeloshan","murugesu",100, 01400000);
     
    	client_int.chagement(014322333);
    	String resultat = client_int.toString();
    	System.out.println(resultat);
        }
    }
    Résultat obtenu :java test1
    nom 3253467

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 565
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 565
    Points : 21 630
    Points
    21 630
    Par défaut
    Hello,

    En fait toString() n'a rien à voir là-dedans. Au contraire, elle a fait son travail qui t'aide à voir ce que tes objets contiennent, et grâce à ça tu peux voir que tes objets sont faux !

    1 : Innocenter toString()

    toString() donne 3253467 parce que ta variable telephone contient 3253467. Il dit les choses comme elles sont.

    Ça peut se vérifier simplement avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void afficherTelephone() {
      System.out.println(telephone);
    }
    Comme tu peux le constater, ce code ne fait intervenir toString() à aucun moment, et ça affiche toujours 3253467. C'est parce que c'est ce que contient vraiment cette variable.

    2 : Le vrai problème

    Comment est-ce que la variable peut contenir 3253467 alors que tu as tapé 014322333 ?

    Eh bien, je pense que nous avons appris la même chose au CP, les zéros qu'on met devant les nombres ne servent à rien. Le nombre 014322333 c'est la même chose que 14322333 qui est aussi la même chose que 00000014322333,000000000000000.

    Puisqu'il ne sert à rien, en général, on ne prend pas la peine d'écrire un zéro devant les nombres. Puisque normalement personne ne fait ça, Java fait un truc bizarre quand on commence un nombre par 0 dans les fichiers .java. Pas la peine d'accuser Java, il est pas le seul ! Beaucoup de langages font ça, parce que c'est utile pour certains trucs d'informatique. Il s'agit d'un standard de l'industrie.

    En tout cas, enlève ce zéro, et tu verras apparaître la valeur 14322333 partout, comme attendu.

    3 : Solution

    Car oui, enlever le zéro n'est pas vraiment la solution. Tu le veux, toi, ce zéro devant le numéro de téléphone.

    Mais... Ça ne te paraît pas bizarre ? Comme déjà vu, 014322333 et 14322333 c'est la même chose. Même si Java ne faisait rien de bizarre avec ce zéro au début, un nombre ça vaut ce qu'il vaut. Quand tu lui demandes de rafficher ce nombre plus tard, il va pas décider comme ça au doigt mouillé de mettre des zéros devant. Et puis comment il saurait combien en mettre ?

    C'est là qu'on se rend compte que les numéros de téléphone, ce ne sont pas des nombres. "Mais si c'est dans le nom !" Euh non. Ça s'appelle un numéro de téléphone, pas un nombre de téléphone. Un numéro c'est une suite de chiffres, mais c'est rarement un nombre.

    Et puisque c'est pas un nombre, ça a rien à faire dans une variable numérique. Pas de int, pas de long, pas de float ni rien de tout ça.

    "Mais quoi alors" ? Eh bien, une String c'est bien, pour stocker des trucs qui s'écrivent. Remplace int telephone par String telephone, adapte le reste, et tout roule.

    4 : Et c'est quoi ce truc bizarre ?

    Le standard de l'industrie, c'est que quand on comment un nombre par zéro dans le programme, c'est qu'on veut l'écrire en octal. La base 8.

    Essaie de mettre un 8 ou un 9 dans ton numéro et regarde ce qui se passe.

    D'ailleurs, essaie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(Integer.toOctalString(3253467));
    et bam ! 14322333. Sans zéro devant, parce que quand on est normal on commence pas les nombres par un zéro.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2021
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2021
    Messages : 58
    Points : 52
    Points
    52
    Par défaut
    Je vous remercie pour votre explication claire sur le fonctionnement. J'ai galéré des jours pour régler le problème.

  4. #4
    Membre éprouvé
    Avatar de Rony Rauzduel
    Homme Profil pro
    En formation Architecte logiciel
    Inscrit en
    Décembre 2008
    Messages
    638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : En formation Architecte logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 638
    Points : 1 128
    Points
    1 128
    Par défaut
    Bonjour,

    Si ton problème est résolu, ce qui semble être le cas peux-tu mettre ce dernier à "Résolu".

    Merci.

    Rony Rauzduel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] [POO]Problème de polymorphisme avec la méthode ToString()
    Par vmolines dans le forum C#
    Réponses: 5
    Dernier message: 08/02/2012, 00h19
  2. Problème d'affichage avec le méthode toString()
    Par Premium dans le forum Langage
    Réponses: 8
    Dernier message: 26/10/2006, 11h36
  3. [POO] Problème avec setInterval/méthodes d'écriture
    Par Lpu8er dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/07/2006, 15h37
  4. problème avec la méthode getElementById() dans Firefox
    Par matrouba dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 19/12/2005, 08h55
  5. Problème avec la méthode pack()
    Par tomca dans le forum Langage
    Réponses: 5
    Dernier message: 15/09/2005, 10h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo