Problème d'affichage et de résolution

Résolu/Fermé
ArmandAs_1998 Messages postés 16 Date d'inscription jeudi 21 janvier 2021 Statut Membre Dernière intervention 20 février 2022 - 22 janv. 2021 à 13:56
ArmandAs_1998 Messages postés 16 Date d'inscription jeudi 21 janvier 2021 Statut Membre Dernière intervention 20 février 2022 - 23 janv. 2021 à 15:48
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

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
22 janv. 2021 à 18:21
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;
}
0
ArmandAs_1998 Messages postés 16 Date d'inscription jeudi 21 janvier 2021 Statut Membre Dernière intervention 20 février 2022
22 janv. 2021 à 19:29
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 ?
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015 > ArmandAs_1998 Messages postés 16 Date d'inscription jeudi 21 janvier 2021 Statut Membre Dernière intervention 20 février 2022
22 janv. 2021 à 20:03
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);
}
0
ArmandAs_1998 Messages postés 16 Date d'inscription jeudi 21 janvier 2021 Statut Membre Dernière intervention 20 février 2022
23 janv. 2021 à 00:47
Ç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 ?
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
23 janv. 2021 à 09:02
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);
}
0
ArmandAs_1998 Messages postés 16 Date d'inscription jeudi 21 janvier 2021 Statut Membre Dernière intervention 20 février 2022
23 janv. 2021 à 15:48
Merci beaucoup !
0