Problème GUI Instruction IF

Résolu
Signaler
Messages postés
3
Date d'inscription
mercredi 28 avril 2010
Statut
Membre
Dernière intervention
28 mai 2012
-
Messages postés
600
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
8 juillet 2016
-
Bonjour,

J'ai besoin de votre aide pour une instruction IF dans laquelle je ne peux pas rentrer et je ne comprends absolument pas pourquoi.

Toute la construction de mon IHM se fait dans une classe Ma_Gestion_Bancaire.java, j'ai une classe Banque, Client, Compte etc.. le but étant de faire toutes les opérations ou du moins presque que propose une Banque.
Voici les attributs de la Banque : nom, ArrayList de Clients
Les attributs d'un Client sont : nom, prénom, adresse, code postal, ville et une hashtable de Compte.
Attributs d'un Compte : numéro, solde.

Donc j'ai cette page où j'aimerais afficher les informations d'un client en rentrant son nom, son prénom et son numéro de compte (dans des JTextField) et que si j'appuie sur le bouton rechercher il m'affiche toutes les informations du client (nom, prénom, adresse, ville, code postal, numéro de compte et solde du compte).

Voici une partie du code sur ce bouton :
Rechercher.addActionListener(new ActionListener ()
        {
        	public void actionPerformed(ActionEvent e)
        	{
        		String str_nom, str_prenom;	
        		int numerocompte;
        		Client recup_cl;
        		Compte recup_cp;
        		
        		str_nom = Search_Nom.getText().toUpperCase();	 //on met le nom entièrement en majuscule
        str_prenom = Search_Prenom.getText().substring(0, 1).toUpperCase() + Search_Prenom.getText().substring(1); //on met la première lettre du prénom en majuscule

        					
        recup_cl = Ma_Banque.getClient(str_nom, str_prenom); //on récupère le client
                        recup_cp = mon_client.getCompte(numerocompte);  


Voici maintenant le code de la fonction GetClient :
public Client getClient(String nom, String prenom)
 {
 Client caux = null;
 int i=0;
 int taille = clients.size();
 for(i=0;i<taille;i++)
 {
 System.out.println(clients.get(i).getNom() + " " + nom);
 System.out.println(clients.get(i).getPrenom() + " " + prenom);
 
 if((clients.get(i).getNom()==nom) && (clients.get(i).getPrenom()==prenom))
 {
 caux = clients.get(i);
 System.out.println(caux);
 }
 }
return caux;
 }

Le principe est simple, je souhaite comparé le contenu des JTextFields (qui sont le nom et le prénom) aux nom et prénom des Clients dans l'ArrayList de Clients que je parcours, pour cet exemple il y a un seul Client dans l'ArrayList dont les noms et prénoms sont respectivement X et Y.
Et donc quoi que je fasse il me renvoie un caux null, il ne rentre pas dans l'instruction IF alors que j'affiche juste avant le contenu des variables et ça me donne "X X" et "Y Y" elles sont donc identiques ça devrait donner TRUE dans mon IF non ?

Merci pour votre temps

Cordialement, Alex.

5 réponses


Salut,

Tout d'abord tu dois revoir tes blocs () car certaines parenthèses ouvrent mais ne ferment pas.

Ensuite:
Avec == (boulean) tu compares les références pas les valeurs de tes String.

Il faut soit utiliser compareTo, soit equals.

Exemple avec equals:
         String StringTruc = "Truc"; 
         //String StringMachin = "Machin"; 
         String StringMachin = "Truc";
         if( (StringTruc).equals(StringMachin) ) { // si égual
            System.out.println("ÉGAL");
         }
      //Ou bien
         if( !(StringTruc).equals(StringMachin) ) { // si non égual
         
            System.out.println("DIFF.");
         }


Dans ton cas:
//if((clients.get(i).getNom()==nom) && (clients.get(i).getPrenom()==prenom)) { 
         if( (clients.get(i).getNom().equals(nom)) && (clients.get(i).getPrenom().equals(prenom)) )// si c'est equal
         {
         }
         if( !(clients.get(i).getNom().equals(nom)) && !(clients.get(i).getPrenom().equals(prenom)) )// si c'est non egual (!)
         {
         } 

Cordialement,

...\ Dan /...

Re,
Dommage qu'on ne puisse pas éditer !
Bon erreur de ma part concernant les parenthèses; c'est ok...

Donc ne pas tenir compte de ma remarque.

Par contre je confirme le reste sous réserve de comparer le tout majuscule à un tout majuscle...


...\ Dan /...
Messages postés
3
Date d'inscription
mercredi 28 avril 2010
Statut
Membre
Dernière intervention
28 mai 2012

Woua..

J'ai limite un peu honte de pas avoir penser à ça ^^", merci beaucoup pour ton aide ça a réglé le problème, j'devrais regarder plus souvent ce que Java met comme méthodes à notre disposition.
Après je ne pensais pas que comparer deux chaines de caractères via == était si différent de la méthode .equals(string) ^^

Cordialement, Alex.

Il ne faut pas avoir honte quand c'est la 1ère fois...

Regarde quand même compareTo qui permet, en comparant 2 String, de savoir s'il y a égalité, < ou > (compareTo retourne <0 ou =0 ou >0).

Cordialement,


...\ Dan /...
Messages postés
600
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
8 juillet 2016
11
Salut,

Sinon tu ne veux pas tenir compte des majuscules/minuscules, tu peux aussi utiliser equalsIgnoreCase(...) ...