Probléme avec remplissage tableau en java
Bonjour,
voilà l'ennonce de mon exercice:
on se propose de gérer une liste de clients d'une entreprise
ecrire une classe java qui permet de:
remplir une tableau de clients
AFFICHER la liste des clients
Trier le liste de clients
Ajouter un client
Supprimer un client et declarer le reste à gauche
ma solution
class client:
import java.util.Scanner;
public class Client {
static String Nom;
static String Prenom;
static int age;
static Client []tab=new Client[100];
public Client(String nom, String prenom, int age) {
Nom = nom;
Prenom = prenom;
this.age = age;
}
public Client() {
}
public static void remplir(){
Scanner in=new Scanner(System.in);
char car =' ';
do{
System.out.println("Entrer le nom du client ?");
Nom=in.next();
System.out.println("Entrer le prenom du client ?");
Prenom=in.next();
System.out.println("Entrer l'age du client ?");
age=in.nextInt();
System.out.println("voulez vous continuez à saisir ?");
car=in.next().charAt(0);
}while(car!='n' && car!='N');
Client c=new Client(Nom,Prenom,age);
// for (int i = 0; i < tab.length; i++) {
tab[0]=new Client(Nom,Prenom,age);
}
public String toString(){
return "************Client************\rNom Client : "+Nom+"\r Prenom Client : "+Prenom+"\r Age Client : "+age+"\r*******************************";
}
public static void Afficher(){
for (int i = 0; i <100; i++) {
System.out.println(tab[i].toString());
}
}
public static void trier(){
tab=new Client[tab.length];
for (int i = 0; i < tab.length; i++) {
for (int j = i+1; j < tab.length; j++) {
if((tab[i].age)>=(tab[j].age)){
Client t=tab[i];
tab[i]=tab[j];
tab[j]=t;
}
}
}
Afficher();
}
public void AjouterClient(){
}
}
class main
import java.util.Scanner;
public class Main {
public static void main(String[]args){
Scanner in=new Scanner(System.in);
int q = 0;
do{
System.out.println("********Menu***********");
System.out.println("1.Remplir un tableau de clients ");
System.out.println("2.Afficher la liste des clients ");
System.out.println("3.Trier la liste des clients ");
System.out.println("4.Ajouter un client");
System.out.println("5.Supprimer un client et décaler le reste à gauche ");
System.out.println("6.Quitter");
System.out.println("*************************");
System.out.println("entrez votre choix SVP ?");
int choix=in.nextInt();
switch(choix){
case 1:Client.remplir();break;
case 2:Client.Afficher();break;
case 3:Client.trier();
case 4:
case 5:
case 6:System.exit(0);
}
}while(q!=6);
}
}
le probléme de l execution
********Menu***********
1.Remplir un tableau de clients
2.Afficher la liste des clients
3.Trier la liste des clients
4.Ajouter un client
5.Supprimer un client et décaler le reste à gauche
6.Quitter
*************************
entrez votre choix SVP ?
1
Entrer le nom du client ?
slql
Entrer le prenom du client ?
sdsd
Entrer l'age du client ?
23
voulez vous continuez à saisir ?
o
Entrer le nom du client ?
zsq
Entrer le prenom du client ?
dsd
Entrer l'age du client ?
34
voulez vous continuez à saisir ?
n
********Menu***********
1.Remplir un tableau de clients
2.Afficher la liste des clients
3.Trier la liste des clients
4.Ajouter un client
5.Supprimer un client et décaler le reste à gauche
6.Quitter
*************************
entrez votre choix SVP ?
2
************Client************
Nom Client : zsq
Prenom Client : dsd
Age Client : 34
*******************************
Exception in thread "main" java.lang.NullPointerException
at Client.Afficher(Client.java:38)
at Main.main(Main.java:21)
voilà l'ennonce de mon exercice:
on se propose de gérer une liste de clients d'une entreprise
ecrire une classe java qui permet de:
remplir une tableau de clients
AFFICHER la liste des clients
Trier le liste de clients
Ajouter un client
Supprimer un client et declarer le reste à gauche
ma solution
class client:
import java.util.Scanner;
public class Client {
static String Nom;
static String Prenom;
static int age;
static Client []tab=new Client[100];
public Client(String nom, String prenom, int age) {
Nom = nom;
Prenom = prenom;
this.age = age;
}
public Client() {
}
public static void remplir(){
Scanner in=new Scanner(System.in);
char car =' ';
do{
System.out.println("Entrer le nom du client ?");
Nom=in.next();
System.out.println("Entrer le prenom du client ?");
Prenom=in.next();
System.out.println("Entrer l'age du client ?");
age=in.nextInt();
System.out.println("voulez vous continuez à saisir ?");
car=in.next().charAt(0);
}while(car!='n' && car!='N');
Client c=new Client(Nom,Prenom,age);
// for (int i = 0; i < tab.length; i++) {
tab[0]=new Client(Nom,Prenom,age);
}
public String toString(){
return "************Client************\rNom Client : "+Nom+"\r Prenom Client : "+Prenom+"\r Age Client : "+age+"\r*******************************";
}
public static void Afficher(){
for (int i = 0; i <100; i++) {
System.out.println(tab[i].toString());
}
}
public static void trier(){
tab=new Client[tab.length];
for (int i = 0; i < tab.length; i++) {
for (int j = i+1; j < tab.length; j++) {
if((tab[i].age)>=(tab[j].age)){
Client t=tab[i];
tab[i]=tab[j];
tab[j]=t;
}
}
}
Afficher();
}
public void AjouterClient(){
}
}
class main
import java.util.Scanner;
public class Main {
public static void main(String[]args){
Scanner in=new Scanner(System.in);
int q = 0;
do{
System.out.println("********Menu***********");
System.out.println("1.Remplir un tableau de clients ");
System.out.println("2.Afficher la liste des clients ");
System.out.println("3.Trier la liste des clients ");
System.out.println("4.Ajouter un client");
System.out.println("5.Supprimer un client et décaler le reste à gauche ");
System.out.println("6.Quitter");
System.out.println("*************************");
System.out.println("entrez votre choix SVP ?");
int choix=in.nextInt();
switch(choix){
case 1:Client.remplir();break;
case 2:Client.Afficher();break;
case 3:Client.trier();
case 4:
case 5:
case 6:System.exit(0);
}
}while(q!=6);
}
}
le probléme de l execution
********Menu***********
1.Remplir un tableau de clients
2.Afficher la liste des clients
3.Trier la liste des clients
4.Ajouter un client
5.Supprimer un client et décaler le reste à gauche
6.Quitter
*************************
entrez votre choix SVP ?
1
Entrer le nom du client ?
slql
Entrer le prenom du client ?
sdsd
Entrer l'age du client ?
23
voulez vous continuez à saisir ?
o
Entrer le nom du client ?
zsq
Entrer le prenom du client ?
dsd
Entrer l'age du client ?
34
voulez vous continuez à saisir ?
n
********Menu***********
1.Remplir un tableau de clients
2.Afficher la liste des clients
3.Trier la liste des clients
4.Ajouter un client
5.Supprimer un client et décaler le reste à gauche
6.Quitter
*************************
entrez votre choix SVP ?
2
************Client************
Nom Client : zsq
Prenom Client : dsd
Age Client : 34
*******************************
Exception in thread "main" java.lang.NullPointerException
at Client.Afficher(Client.java:38)
at Main.main(Main.java:21)
Configuration: Windows Vista Firefox 2.0.0.18
25 réponses
Résumé de la discussion
L'exercice Java vise à gérer une liste de clients par tableau et opérations d'inscription, d'affichage et de tri, mais une NullPointerException survient lors de l'affichage lorsque les éléments ne sont pas initialisés. Le problème provient principalement d'un tableau tab non initialisé et d'un parcours qui lit tab[i] sans valeur, provoquant l'erreur affichée et des incohérences lors du remplissage. Des correctifs incluent l'initialisation du tableau et des éléments (tab = new Client[...] et tab[i] = new Client(...)), la modification de l'affichage pour boucler tab.length et l'utilisation d'un Comparable pour le tri.
-
public void trier(){
for (int i = 0; i < cmpt; i++) {
for (int j =i+1; j < cmpt-1; j++) {
Client t=tab[i];
tab[i]=tab[i+1];
tab[i+1]=t;
}
}
Afficher();
}
la methode de tri et l implementation de lintreface comaparable pour utiliser la methode comparto
public int compareTo(Object o) {
Client c=(Client) o;
if(age>c.age) return 1;
else if(age<c.age) return -1;
else if(Nom.compareTo(c.Nom)>0) return 1;
else if(Nom.compareTo(Nom)<0) return -1;
else if(Prenom.compareTo(Prenom)>0) return 1;
else if(Prenom.compareTo(Prenom)<0) return -1;
return 0;
}
quand j' execute il ne tri pas le tableau ni par ordre croissant ni par ordre decroissant il me donne un tri en desordre
je ne sais pas c quoi le bléme pouvez m aider pour le dernier pas de mon exercice et merci d avance -
re
j ai preceque terminer mon exercice voilà mon code :
classe client
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Client implements Comparable{
String Nom;
String Prenom;
int age;
int cmpt=0;
Client []tab=new Client[100];
public Client(String nom, String prenom, int age) {
Nom = nom;
Prenom = prenom;
this.age = age;
}
public Client() {
}
public void remplir(){
Scanner in=new Scanner(System.in);
char car =' ';
int i=0;
do{
System.out.println("Entrer le nom du client ?");
Nom=in.next();
System.out.println("Entrer le prenom du client ?");
Prenom=in.next();
System.out.println("Entrer l'age du client ?");
age=in.nextInt();
Client c=new Client(Nom,Prenom,age);
tab[i]=new Client(Nom,Prenom,age);
i++;
cmpt++;
System.out.println("voulez vous continuez à saisir ?");
car=in.next().charAt(0);
}while(car!='n' && car!='N');
}
public String toString(){
return "************Client************\rNom Client : "+Nom+"\r Prenom Client : "+Prenom+"\r Age Client : "+age+"\r*******************************";
}
public void Afficher(){
for (int i = 0; i <cmpt; i++) {
System.out.println(tab[i].toString());
}
}
public void trier(){
for (int i = 0; i < cmpt; i++) {
for (int j =i+1; j < cmpt-1; j++) {
Client t=tab[i];
tab[i]=tab[i+1];
tab[i+1]=t;
}
}
Afficher();
}
public void AjouterClient(){
Scanner in=new Scanner(System.in);
String Nom;
String Prenom;
int age;
int i=0;
System.out.println("Entrer le nom du client ?");
Nom=in.next();
System.out.println("Entrer le prenom du client ?");
Prenom=in.next();
System.out.println("Entrer l'age du client ?");
age=in.nextInt();
Client c=new Client(Nom,Prenom,age);
tab[cmpt++]=new Client(Nom,Prenom,age);
System.out.println("votre Client a bien été ajouter Merci !!");
}
public void supprimer(){
Scanner in=new Scanner(System.in);
System.out.println("entrer l'indice de l element que vous voulez supprimer SVP ?");
int indice=in.nextInt();
for (int i = 0; i < cmpt; i++) {
if(indice==i){
tab[i]=tab[i+1];
cmpt--;
}
}
System.out.println("votre client a bien été supprimer Merci !!");
}
@Override
public int compareTo(Object o) {
Client c=(Client) o;
if(age>c.age) return 1;
else if(age<c.age) return -1;
else if(Nom.compareTo(c.Nom)>0) return 1;
else if(Nom.compareTo(Nom)<0) return -1;
else if(Prenom.compareTo(Prenom)>0) return 1;
else if(Prenom.compareTo(Prenom)<0) return -1;
return 0;
}
}
il me reste un probléme dans le tri j ai implementé l'interface comparable et la methode comaprto ui est en haut dans le code et j ai fait une methodede tri sa fonction et ne génére aucune exception main le probléme que cette methode de tri ne tri pas croissant ou decroissant mais il change les emplacement sans aucune notion croissant ou decroissant voilà comment il me donne l exection
********Menu***********
1.Remplir un tableau de clients
2.Afficher la liste des clients
3.Trier la liste des clients
4.Ajouter un client
5.Supprimer un client et décaler le reste à gauche
6.Quitter
******* ******************
entrez votre choix SVP ?
3
************Client************
Nom Client : sd
Prenom Client : sdf
Age Client : 21
*******************************
************Client************
Nom Client : sqdf
Prenom Client : sqdf
Age Client : 19
*******************************
************Client************
Nom Client : sdf
Prenom Client : sdf
Age Client : 28
******************************* -
re
j ai preceque terminer mon exercice voilà mon code :
classe client
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Client implements Comparable{
String Nom;
String Prenom;
int age;
int cmpt=0;
Client []tab=new Client[100];
public Client(String nom, String prenom, int age) {
Nom = nom;
Prenom = prenom;
this.age = age;
}
public Client() {
}
public void remplir(){
Scanner in=new Scanner(System.in);
char car =' ';
int i=0;
do{
System.out.println("Entrer le nom du client ?");
Nom=in.next();
System.out.println("Entrer le prenom du client ?");
Prenom=in.next();
System.out.println("Entrer l'age du client ?");
age=in.nextInt();
Client c=new Client(Nom,Prenom,age);
tab[i]=new Client(Nom,Prenom,age);
i++;
cmpt++;
System.out.println("voulez vous continuez à saisir ?");
car=in.next().charAt(0);
}while(car!='n' && car!='N');
}
public String toString(){
return "************Client************\rNom Client : "+Nom+"\r Prenom Client : "+Prenom+"\r Age Client : "+age+"\r*******************************";
}
public void Afficher(){
for (int i = 0; i <cmpt; i++) {
System.out.println(tab[i].toString());
}
}
public void trier(){
for (int i = 0; i < cmpt; i++) {
for (int j =i+1; j < cmpt-1; j++) {
Client t=tab[i];
tab[i]=tab[i+1];
tab[i+1]=t;
}
}
Afficher();
}
public void AjouterClient(){
Scanner in=new Scanner(System.in);
String Nom;
String Prenom;
int age;
int i=0;
System.out.println("Entrer le nom du client ?");
Nom=in.next();
System.out.println("Entrer le prenom du client ?");
Prenom=in.next();
System.out.println("Entrer l'age du client ?");
age=in.nextInt();
Client c=new Client(Nom,Prenom,age);
tab[cmpt++]=new Client(Nom,Prenom,age);
System.out.println("votre Client a bien été ajouter Merci !!");
}
public void supprimer(){
Scanner in=new Scanner(System.in);
System.out.println("entrer l'indice de l element que vous voulez supprimer SVP ?");
int indice=in.nextInt();
for (int i = 0; i < cmpt; i++) {
if(indice==i){
tab[i]=tab[i+1];
cmpt--;
}
}
System.out.println("votre client a bien été supprimer Merci !!");
}
@Override
public int compareTo(Object o) {
Client c=(Client) o;
if(age>c.age) return 1;
else if(age<c.age) return -1;
else if(Nom.compareTo(c.Nom)>0) return 1;
else if(Nom.compareTo(Nom)<0) return -1;
else if(Prenom.compareTo(Prenom)>0) return 1;
else if(Prenom.compareTo(Prenom)<0) return -1;
return 0;
}
}
il me reste un probléme dans le tri j ai implementé l'interface comparable et la methode comaprto ui est en haut dans le code et j ai fait une methodede tri sa fonction et ne génére aucune exception main le probléme que cette methode de tri ne tri pas croissant ou decroissant mais il change les emplacement sans aucune notion croissant ou decroissant voilà comment il me donne l exection
********Menu***********
1.Remplir un tableau de clients
2.Afficher la liste des clients
3.Trier la liste des clients
4.Ajouter un client
5.Supprimer un client et décaler le reste à gauche
6.Quitter
******* ******************
entrez votre choix SVP ?
3
************Client************
Nom Client : sd
Prenom Client : sdf
Age Client : 21
*******************************
************Client************
Nom Client : sqdf
Prenom Client : sqdf
Age Client : 19
*******************************
************Client************
Nom Client : sdf
Prenom Client : sdf
Age Client : 28
******************************* -
bon il me reste le tri et la supprision
j ai un bléme dans le tri
voilà ma fonction :
public static void trier(){
for (int i = 0; i < cmpt; i++) {
if((tab[i].age)>(tab[i+1].age)){
Client t=tab[i];
tab[i]=tab[i+1];
tab[i+1]=t;
}}
} -
merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii infinement pour ton aide :)
-
ContributeurSalut,
Désolé pour le temps de réponse. Pour les variables globales, oublie j'ai mal lu. Je pensais que tu avais mis tes variables en global alors que ce sont des attributs.
Sinon ton problème est que tu as mis tes variables nom age prenom en static. Tu devrais enlever le static et je pense que ça marchera mieux. Par contre ton modèle est spécial. Normalement ton tableau de clients aurait dû être dans le main, enfin bon. Et n'oublie pas de prendre l'habitude de mettre tes attributs en private.
Cdlt -
SVP répondez moi c urgenttttttttttttttttttttttttttt il faut ue je rend ce tp dm1
-
svp repondez moi c urgent
-
j ai cru que j'ai réparer la methode afficher mais c le contraire il n y a aucun exception mais il y a une repétition saund j entre 3 clients et je veux afficher elle m afficher le dernier client 3 fois dans la methode afficher voilà le code
import java.util.Scanner;
public class Client{
static String Nom;
static String Prenom;
static int age;
static int cmpt=0;
static Client []tab=new Client[100];
public Client(String nom, String prenom, int age) {
Nom = nom;
Prenom = prenom;
this.age = age;
}
public Client() {
}
public static void remplir(){
Scanner in=new Scanner(System.in);
char car =' ';
int i=0;
do{
System.out.println("Entrer le nom du client ?");
Nom=in.next();
System.out.println("Entrer le prenom du client ?");
Prenom=in.next();
System.out.println("Entrer l'age du client ?");
age=in.nextInt();
Client c=new Client(Nom,Prenom,age);
tab[i]=new Client(Nom,Prenom,age);
i++;
cmpt++;
System.out.println("voulez vous continuez à saisir ?");
car=in.next().charAt(0);
}while(car!='n' && car!='N');
}
public String toString(){
return "************Client************\rNom Client : "+Nom+"\r Prenom Client : "+Prenom+"\r Age Client : "+age+"\r*******************************";
}
public static void Afficher(){
for (int i = 0; i <cmpt; i++) {
System.out.println(tab[i].toString());
}
}
svp il faut que je rend ce tp dm1 inchalah :s -
re j ai un bléme au niveau de la methode trier :s pouvais vous la voire en haut
-
merci pour l info mais tu peux m expliquer svp pourquoi c mieux de les donner en paramétre des fonctions au lieu de les declarer globale
??? -
ContributeurExactement ce qu'il fallait faire. Bien joué ;)
Par contre, juste une petite remarque, évite les variables globales. Il vaut mieux passer ton tableau et la taille en paramètre dans tes fonctions ;)
Cdlt -
oui merci c est résolut :)
j ai utilisé une variable:
static int cmpt=0; qui s'incremente lors de la saisit
dans la methodes affichage j ai fais comme suite
public static void Afficher(){
for (int i = 0; i <cmpt; i++) {
System.out.println(tab[i].toString());
}
merci pour votre aide :) -
ContributeurSalut,
Repars de ta version principale. C'est tout simple l'erreur. Tu affiches les 100 clients dans ta méthode surchargée toString, et ce même si tu n'as rempli qu'un client. Du coup, ton code va vouloir afficher un NULL, d'où l'erreur d'exception. Il faut donc que tu gères une variable qui contient le nombre de clients remplis ;)
Cdlt -
j ai essayé static Client []tab; au lieu de static Client []tab=new Client[100];
et j'ai changé la methode afficher comme suite:
public static void Afficher(){
for (int i = 0; i <tab.length; i++) {
System.out.println(tab[i].toString());
}
et voilà j ai eu un erreur lors de la saisit
voilà l execution + probléme
********Menu***********
1.Remplir un tableau de clients
2.Afficher la liste des clients
3.Trier la liste des clients
4.Ajouter un client
5.Supprimer un client et décaler le reste à gauche
6.Quitter
******* ******************
entrez votre choix SVP ?
1
Entrer le nom du client ?
sdsd
Entrer le prenom du client ?
sdsd
Entrer l'age du client ?
23
probléme
Exception in thread "main" java.lang.NullPointerException
at Client.remplir(Client.java:26)
at Main.main(Main.java:20)
svpppppppppp aide moi c urgent -
j ai essayé static Client []tab; au lieu de static Client []tab=new CLient[100];
et j'ai changé la methode d'affichage comme suite:
public static void Afficher(){
for (int i = 0; i <tab.length; i++) {
System.out.println(tab[i].toString());
}
et voilà il ma donné une erreur au niveau du saisit
execution avce probléme :s
********Menu***********
1.Remplir un tableau de clients
2.Afficher la liste des clients
3.Trier la liste des clients
4.Ajouter un client
5.Supprimer un client et décaler le reste à gauche
6.Quitter
******* ******************
entrez votre choix SVP ?
1
Entrer le nom du client ?
sdsd
Entrer le prenom du client ?
sdsd
Entrer l'age du client ?
23
Exception in thread "main" java.lang.NullPointerException
at Client.remplir(Client.java:26)
at Main.main(Main.java:20)
SVPPPPPP aider moi c urgent -
au lieu d'ecrire comme suite dans la declaration static Client []tab=new Client[100];
j'ai ecris ça static Client []tab;
et aprés j ai mis dans la boucle de la methode d'affichage comme suite:
public static void Afficher(){
for (int i = 0; i <tab.length; i++) {
System.out.println(tab[i].toString());
}
et il m'a donné cette fois un probléme lors de la saisit des client voilà le probléme
execution:
********Menu***********
1.Remplir un tableau de clients
2.Afficher la liste des clients
3.Trier la liste des clients
4.Ajouter un client
5.Supprimer un client et décaler le reste à gauche
6.Quitter
******* ******************
entrez votre choix SVP ?
1
Entrer le nom du client ?
sdsd
Entrer le prenom du client ?
sdsd
Entrer l'age du client ?
23
Exception in thread "main" java.lang.NullPointerException
at Client.remplir(Client.java:26)
at Main.main(Main.java:20)
:s alors comment faire SVP -
au niveau de la déclaration des attributs faut rectifier un peu com suit:
static Client []tab; -
oui ça marche avec 2 client
-
essaye de revoir la méthode "afficher" comme suit,en ayant saisie que 2 client avec la méthode "remplir":
public static void Afficher(){
for (int i = 0; i <2; i++) {
System.out.println(tab[i].toString());
}
- 1
- 2
Suivant