Comparer un élément d'un tableau avec ce que l'utilisateur écrit
jej
-
jej -
jej -
Bonjour,
Je viens de commencer Java cette année et il nous ait demandé de créer un programme.
J'ai créé un tableau Clients. Ce que j'arrive pas à faire c'est comparer un élément de ce tableau avec ce que l'utilisateur écrit dans la fenêtre.
Je crois que le problème viens de mon LireClient.
Pouvez vous regarder si vous voyez une erreur ?
Merci beaucoup =)
Voici ma méthode LireClient (et la surcharge):
public static client LireClient(){
client cli = null;
System.out.println("quel est le nom du client?");
String nomcli = Lire.S();
Iterator<client> lesClients = mesClients.iterator();
while (lesClients.hasNext()){
cli = lesClients.next();
if (cli.getNom().compareTo(nomcli)==0){
break;
}
}
return cli;
}
// Surcharge de la méthode LireClient
public static client LireClient(String nomcli){
client cli = null;
Iterator<client> lesClients = mesClients.iterator();
while (lesClients.hasNext()){
cli = lesClients.next();
if (cli.getNom().compareTo(nomcli)==0){
break;
}
}
return cli;
}
Je viens de commencer Java cette année et il nous ait demandé de créer un programme.
J'ai créé un tableau Clients. Ce que j'arrive pas à faire c'est comparer un élément de ce tableau avec ce que l'utilisateur écrit dans la fenêtre.
Je crois que le problème viens de mon LireClient.
Pouvez vous regarder si vous voyez une erreur ?
Merci beaucoup =)
Voici ma méthode LireClient (et la surcharge):
public static client LireClient(){
client cli = null;
System.out.println("quel est le nom du client?");
String nomcli = Lire.S();
Iterator<client> lesClients = mesClients.iterator();
while (lesClients.hasNext()){
cli = lesClients.next();
if (cli.getNom().compareTo(nomcli)==0){
break;
}
}
return cli;
}
// Surcharge de la méthode LireClient
public static client LireClient(String nomcli){
client cli = null;
Iterator<client> lesClients = mesClients.iterator();
while (lesClients.hasNext()){
cli = lesClients.next();
if (cli.getNom().compareTo(nomcli)==0){
break;
}
}
return cli;
}
A voir également:
- Comparer un élément d'un tableau avec ce que l'utilisateur écrit
- Tableau word - Guide
- Trier un tableau excel - Guide
- Tableau ascii - Guide
- Imprimer un tableau excel - Guide
- Comment faire un tableau croisé dynamique - Guide
1 réponse
Tu as dans ton code des choses qu'il est impossible de savoir ce que c'est et tu dois nous dire ce que c'est (leur type, leur rôle, voire leur code) pour savoir s'il y a des erreurs dessus. Il s'agit de :
→ client
→ Lire.S()
→ mesClients
Sinon, au niveau de ta surcharge, les deux codes feront la même chose, sous réserve que String nomcli = Lire.S(); corresponde bien au paramètre String nomcli, et que "mesClients" (dont on ne sait rien) ait bien la même valeur dans les deux codes.
Remarques :
→ il faut utiliser correctement le mot-clé static, car ici tu fais référence à "mesClients" qui devrait soit être un paramètre de la méthode static, soit être utilisé dans un contexte non static, mais faire référence à un objet static est déconseillé.
→ je te conseilles de remplacer l'utilisation de ta boucle while sur les Iterator par une boucle "for each" qui est bien plus simple à coder, et donc moins source d'erreur.
→ tu devrais remplacer compareTo(nomcli)==0, par la méthode equals(nomcli)
→ je t'invite à respecter les conventions de nommages de Java (les noms de classes commencent par une majuscule, les noms de méthodes par une minuscule...)
→ client
→ Lire.S()
→ mesClients
Sinon, au niveau de ta surcharge, les deux codes feront la même chose, sous réserve que String nomcli = Lire.S(); corresponde bien au paramètre String nomcli, et que "mesClients" (dont on ne sait rien) ait bien la même valeur dans les deux codes.
Remarques :
→ il faut utiliser correctement le mot-clé static, car ici tu fais référence à "mesClients" qui devrait soit être un paramètre de la méthode static, soit être utilisé dans un contexte non static, mais faire référence à un objet static est déconseillé.
→ je te conseilles de remplacer l'utilisation de ta boucle while sur les Iterator par une boucle "for each" qui est bien plus simple à coder, et donc moins source d'erreur.
→ tu devrais remplacer compareTo(nomcli)==0, par la méthode equals(nomcli)
→ je t'invite à respecter les conventions de nommages de Java (les noms de classes commencent par une majuscule, les noms de méthodes par une minuscule...)
public /*static*/ Client lireClient(/*Iterable<Client> lesClients*/) { System.out.println("Quel est le nom du client ?"); String nomCli = Lire.s(); for (Client cli : lesClients) if (cli.getNom().equals(nomCli)) return cli; return null; } public /*static*/ Client lireClient(/*Iterable<Client> lesClients, */String nomCli) { for (Client cli : lesClients) if (cli.getNom().equals(nomCli)) return cli; return null; }
J'utilise la méthode LireClient quand je veux que ne nom du client me soit retourné par exemple :
public static void approvisionner(){
client moncli = LireClient();
System.out.println("Le client est " + moncli.getNom());
}
En faite je pense que le problème vient de LireClient mais je ne suis pas sûr (je sais que le problème ne vient pas de ma classe fenêtre, que le tableau est bien instancié => chose que j'ai vérifier).
Mais j'ai l'impression que quand on appel la méthode getNom() ( de la classe client) le programme ne comprend pas.
Voici ma classe client (d'où vient le getNom()) :
public class client {
private String nom;
private double credit;
public client(String no, double cred){
nom = no;
credit = cred;
}
public String getNom(){
return nom;
}
public void affiche(){
System.out.println("le client " + nom + " a un crédit de " + credit);
}
public void setCredit(double montant){
credit = credit - montant;
}
public double getCredit(){
return credit;
}
}
Pour ce qui est de "mesClients" :
static ArrayList<client> mesClients = new ArrayList<client>();
// instanciation des clients
mesClients.add(new client("Lauriane",0));
mesClients.add(new client("Marie",0));
mesClients.add(new client("Clara",0));
mesClients.add(new client("Louise",0));
Encore merci pour votre aide
Tu peux regarder ce code de test, pour voir :
Pour ce qui est du Lire.S() voici le code de ma classe Lire() pour lire un String :
import java.io.*;
public class Lire
{
public static String S() // Lire un String
{
String tmp = "";
char C='\0';
try {
while ((C=(char) System.in.read()) !='\n')
{
if (C != '\r') tmp = tmp+C;
}
}
catch (IOException e)
{
System.out.println("Erreur de frappe");
System.exit(0);
}
return tmp;
} // fin de S()
}
Si tu tapes "Lauriane" (avec un "L" majuscule) tu retrouveras bien le client "Lauriane", mais si tu tapes "lauriane" (avec un "l" minuscule) alors tu ne trouveras personne et par défaut c'est le dernier du tableau qui est affiché. Ce comportement par défaut est à modifier, il vient de ton return cli qui a toujours la dernière valeur du next() et ce que tu sortes de la boucle avec un break ou parce qu'il n'y a plus d'élément à lire... Il faut que tu distingues ces deux cas.
Remarque : ta méthode S fonctionne mais on peut faire nettement plus simple en utilisant des classes dédiées comme Scanner :
merci beaucoup pour tout vos conseils. Je prend note de tout cela.