Problème d'affichage et de résolution [Résolu]

Signaler
Messages postés
16
Date d'inscription
jeudi 21 janvier 2021
Statut
Membre
Dernière intervention
23 février 2021
-
Messages postés
16
Date d'inscription
jeudi 21 janvier 2021
Statut
Membre
Dernière intervention
23 février 2021
-
Bonjour,

J'ai un problème de résolution.
J'ai 2 classes: la première permet de représenter une personne (nom, prénom, ville) et la deuxième un compte en banque (titulaire, solde). La classe personne contient une méthode d'affichage d'une personne.
J'ai du mal à faire fonctionner mon programme qui consiste à afficher le titulaire d'un compte (dans la méthode affiche() --> ça donne Titulaire: Personne@6504e3b2 et Solde:50) et à savoir si 2 comptes ont un même titulaire. Je fais une résolution qui me paraît facile mais je ne sais pas où le problème se situe. Le voici. Merci.

public class CompteBanque {
	Personne titulaire;

     void affiche(){
		    System.out.println("Titulaire: " +titulaire);
            System.out.println("Solde: " +solde);
	}
	
     boolean memeTitulaire(CompteBanque c) {
		    return titulaire.equals(c.titulaire);
	 }

public static void main(String[]args) {
        Personne p1 = new Personne() ; 
		CompteBanque c1 = new CompteBanque() ;
		c1.titulaire=p1 ;
        c1.solde = 50;
		Personne p2 = new Personne() ;
		CompteBanque c2 = new CompteBanque() ; 
		c2.titulaire=p2 ;

        c1.affiche()
        System.out.println(c1.memeTitulaire(c2));


L'autre classe est:

public class Personne {
	String nom, prenom, ville;
	
	void aff(String s) {
		s = nom+" "+prenom;
		System.out.println(s);
	}
	public static void main(String[]args) {
		Personne p1 = new Personne ();
		p1.nom = "Durand";
		p1.prenom = "David";
		p1.ville = null;
		p1.aff(" ");
		
		Personne p2 = new Personne ();
		p2.nom = "Durand";
		p2.prenom = "David";
		p2.ville = null;
		p2.aff(" ");
		
	}
}

2 réponses

Messages postés
16336
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
14 mai 2021
2 829
Bonjour,

Lorsque tu affiches un objet, c'est la méthode toString() qui est appelée. Elle est définie dans la classe Object avec un comportement par défaut qui te donne "Personne@6504e3b2"

Pour obtenir un autre affichage il faut redéfinir la méthode toString() avec un comportement spécifique à ta classe, par exemple :

@Override
public String toString(){
    return nom + " " + prenom;
}
Messages postés
16
Date d'inscription
jeudi 21 janvier 2021
Statut
Membre
Dernière intervention
23 février 2021

C'est bizarre parce que dans les consignes du tutorat que je suis il n'est pas demandé de retourner un résultat mais simplement d'afficher :
La consigne c'est : "Créez deux classes : la première permet de représenter une personne (nom, prénom, ville) et la deuxième un compte en banque (titulaire, solde). La classe personne contient une méthode d'affichage d'une personne. Les opérations que l'on peut effectuer sur un compte sont les suivantes : déposer de l'argent, retirer de l'argent, transférer de l'argent vers un autre compte, afficher l'état du compte (titulaire et montant), savoir si le compte appartient au même titulaire qu'un compte donné (on suppose que toutes les instances de personnes sont différentes)".
Il n'y a donc pas d'autres moyens d'y arriver ?
Messages postés
16336
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
14 mai 2021
2 829 >
Messages postés
16
Date d'inscription
jeudi 21 janvier 2021
Statut
Membre
Dernière intervention
23 février 2021

Tu peux le faire d'une autre manière pour te conformer à ton exercice, mais en gardant en tête que ce n'est pas comme cela qu'on devrait écrire un programme Java.

Dans CompteBanque :
void affiche (){
    System.out.print("Titulaire: ");
    titulaire.aff();
    System.out.println("Solde: " +solde);
}
Messages postés
16
Date d'inscription
jeudi 21 janvier 2021
Statut
Membre
Dernière intervention
23 février 2021

Ça a marché pour l'affichage !... ça cloche juste maintenant juste au niveau de la méthode suivante pour savoir si 2 comptes appartiennent au même titulaire: je fais:


	boolean memeTitulaire(CompteBanque c) {
		return titulaire.equals(c.titulaire);
	}

    public static void main(String[]args) {

		Personne p1 = new Personne(); 
		CompteBanque c1 = new CompteBanque();
		p1.nom = "Durand";
		p1.prenom = "David";
		c1.titulaire=p1;
		
		Personne p2 = new Personne();
		CompteBanque c2 = new CompteBanque(); 
		p2.nom = "Durand";
		p2.prenom = "David";
		c2.titulaire=p2;
        
       System.out.println(c1.memeTitulaire(c2));


Mais ça ne marche pas je ne sais pas pourquoi ?
Messages postés
16336
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
14 mai 2021
2 829
C'est le même principe qu'avec la méthode toString. La méthode equals est définie dans la classe Object avec un comportement par défaut qu'il faut redéfinir avec un comportement spécifique à ta classe.
@Override
public boolean equals(Object obj) {
    Personne p = (Personne) obj;
    return nom.equals(p.nom) && prenom.equals(p.prenom);
}

Alternative, mais en gardant en tête que ce n'est pas comme cela qu'on devrait faire :
boolean memeTitulaire(CompteBanque c) {
    return titulaire.nom.equals(c.titulaire.nom) && titulaire.prenom.equals(c.titulaire.prenom);
}
Messages postés
16
Date d'inscription
jeudi 21 janvier 2021
Statut
Membre
Dernière intervention
23 février 2021

Merci beaucoup !