Java :Problème d'affichage

Fermé
mery19 - 23 mars 2008 à 21:22
 Seb - 25 mars 2008 à 10:54
Bonjour,
j'ai écrit un simple programme sur java , qui permet d'ajouter et d'afficher les
informations des salariés mais si j'ajoute 2 salariés et je choisis de les afficher ,le programme
n'affiche que le dernier salarié saisi , 2fois ???!!!
voici le code :

import java.io.*;
public class employe {
	 public static String nom;
	 public static String service;
	 public static int matricule,i=0,n=0;
	 public static double salaire;
	 static employe T[]=new employe[10];
	 public static BufferedReader clavier=new BufferedReader(new InputStreamReader (System.in));
	
                /***********************************************/
	 public static void Ajout()throws IOException
	 {int rep,mat=0;
	 do{
	      n++;
	     mat++;
                     T[i].matricule= mat;
	     System.out.println("Saisir le nom de l'employe ");
	     T[i].nom=clavier.readLine();
	     System.out.println("Saisir le service de l'employe");
	     T[i].service=clavier.readLine();
	     System.out.println("Saisir le salaire de l'employe");
	     T[i]. salaire=Double.parseDouble(clavier.readLine());
	      i++;
	     System.out.println("Voulez vous ajouter un autre employe ?(1:oui/0:non)");
	     rep=Integer.parseInt(clavier.readLine());
	     }while(rep!=0);
	 }
	
	 /**********************************************/
	 public static void affichage()
	 {
		for(i=0;i<n;i++)
		{
			System.out.println("***************************");
			System.out.println("l'employe numero :"+(i+1));
			System.out.println("Matricule :"+T[i].matricule);
			System.out.println("Nom :"+T[i].nom);
			System.out.println("Service :"+T[i].service);
			System.out.println("Matricule :"+T[i].salaire);
			System.out.println("***************************");	
		}
	 }
	 /**********************************************/
	  employe()
	 {
		 
	 }
A voir également:

4 réponses

vlmath Messages postés 793 Date d'inscription vendredi 20 octobre 2006 Statut Contributeur Dernière intervention 4 septembre 2011 160
23 mars 2008 à 21:54
Salut,

Je n'ai pas fait beaucoup de Java, mais il me semble que les variables "static" sont des variables qui sont communes à toute la classe, ce qui n'est pas ce que tu veux.
La méthode afficher deva aussi ne pas être static.

Je te conseil aussi d'ajouter une condition sur ta boucle, pour ne pas avoir d'exception ArrayIndexOutOfBoundsException, ou alors de la traiter.

@Bientôt
0
Bonsoir je n'ai pas vraiment lu ton programme mais je te conseil d'utiliser un Vector ou une ArrayList générique pour l'enregistrement de tes objets car le tableau ne le gere pas assez bien...
 Bon courage!
0
Utilisateur anonyme
25 mars 2008 à 06:52
Salut,

Si ce n'est pas trop tard, voici comment j'aurais fait avec une matrice a deux dimensions :

import java.io.*;

public class employe

{
public static String Smat;
public static int i=0,j=0,n=0;
public static double salaire;

// public static String nom; // les commentaires correspondent a la version originale
// public static String service;
// public static int matricule,i=0,n=0;
// public static double salaire;
// static employe T[]=new employe[10];

static String[][] employe = new String[10][4];
public static BufferedReader clavier=new BufferedReader(new InputStreamReader (System.in));

/***********************************************/

public static String Ajout() // throws IOException

{
String rep;
int mat=0;
do
{
try
{
j = 0;
n++;
mat++;
Smat = Integer.toString(mat); // Smat est forcement ok, c'est le resultat de mat++
// T[i][j].matricule = Smat;
employe[i][j] = Smat;
System.out.println("mat = " + employe[i][j]);
System.out.println("Saisir le nom de l'employe ");
j++;
// T[i][j].nom=clavier.readLine();
employe[i][j] = clavier.readLine();
System.out.println("nom = " + employe[i][j]);
j++;
System.out.println("Saisir le service de l'employe");
// T[i][j].service=clavier.readLine();
employe[i][j] = clavier.readLine();
System.out.println("service = " + employe[i][j]);
j++;
System.out.println("Saisir le salaire de l'employe");
// ici "catcher" try ... catch (NumberFormatException e)
// T[i][j]. salaire=Double.parseDouble(clavier.readLine());
employe[i][j] = clavier.readLine();
System.out.println("salaire_String = " + employe[i][j]);
String Ssalaire = employe[i][j];
int Isalaire = Integer.parseInt(Ssalaire); // pour controler si numerique (catch)
i++;
System.out.println("Voulez vous ajouter un autre employe ? "
+ "(1:oui par defaut/0:non)"); // 1 par defaut
rep=clavier.readLine();
if (rep.equals("")) rep = "1";
}

catch (IOException e)

{
e.printStackTrace();
break;
}

catch (NumberFormatException f)

{
f.printStackTrace();
System.out.println("Salaire non numerique.");
mat--; n--; rep = "1";
// return "";
}
}while(rep.equals("1"));
affichage();
return "";
}

/**********************************************/
/* public static void affichage()
{
for(i=0;i<n;i++)
{
j = 0;
System.out.println("***************************");
System.out.println("l'employe numero :"+(i+1));
j++;
System.out.println("Matricule :"+T[i][j].matricule);
j++;
System.out.println("Nom :"+T[i][j].nom);
j++;
System.out.println("Service :"+T[i][j].service);
j++;
System.out.println("Salaire :"+T[i][j].salaire);
System.out.println("***************************");
}
} */

public static String affichage()

{
for(i=0;i<n;i++)
{
try
{
j=0;
System.out.println("***************************");
System.out.println("l'employe numero :"+(i+1));
// System.out.println("Matricule :"+T[i][j].matricule);
System.out.println("Matricule : " + employe[i][j]);
j++;
// System.out.println("Nom :"+T[i][j].nom);
System.out.println("Nom : " + employe[i][j]);
j++;
// System.out.println("Service :"+T[i][j].service);
System.out.println("Service : " + employe[i][j]);
j++;
// System.out.println("Salaire :"+T[i][j].salaire);
String Ssalaire = employe[i][j];
int Isalaire = Integer.parseInt(Ssalaire);
salaire = Isalaire;
System.out.println("salaire = " + salaire);
System.out.println("***************************");
}

catch (NumberFormatException f) // cas impossible (verifie dans Ajout() mais exige)

{
f.printStackTrace();
break;
}
}
return "";
}
/* public static String intro() // pour bloquer l'affichage a la console
{
try
{
System.out.println("<intro>");
String intro = clavier.readLine();
}

catch (IOException e)

{
}
return "";
} */

public static void main(String args[])

{
Ajout();
try
{
System.out.println("<intro>");
String intro = clavier.readLine();
}

catch (IOException e)

{
}
System.exit(0);
}
}

Naturellement il y a des controles a ajouter comme l'entree obligatoire du nom ou du service service ...

Mais cela corrige l'affichage.

Cordialement.

Dan
0
Autres conseils :

* ne mets pas tes variables "de boucle" comme i en attribut de classe, c'est super dangereux.
* tu as essayé de faire de l'objet mais tu as mis des statics partout, ce qui veut dire que tes données, meme si tu crées plusieurs instance de ton objet "employé" seront toujours les memes. Ton problème d'affichage vient du fait que tu as n qui vaut bien 2, mais 'nom', 'service', etc... ont toujours la MEME VALEUR. Donc tu affiches bien 2 objets employés qui contiennent les memes infos. La derniere saisie ecrasant invariablement la précedente (à cause des statics)
* tu as crée un objet Employe, mais est il logique au niveau 'objet' que celui ci contienne une liste d'employé ? le plus court serait de faire ainsi (mettre les set/get est aussi une bonne chose ;) ):

import java.util.Collection;
import java.util.Vector;

public class GestionEmploye {

private static int identifiantGenerator = 0;
private Collection<Employe> listeEmploye = new Vector<Employe>();

public void addEmploye(String nom, String service, double salaire) {
listeEmploye.add(new Employe(nom,service,salaire));
}

public void afficheEmployes() {
for( Employe employe : listeEmploye ) {
System.out.println(employe);
}
}

public class Employe {
private int id;
private String nom;
private String service;
private double salaire;

public Employe( String nom, String service,double salaire) {
id = identifiantGenerator++;
setNom(nom);
setService(service);
setSalaire(salaire);
}

public int getId() {
return id;
}

public String getNom() {
return nom;
}

public void setNom(String nom) {
this.nom = nom;
}

public String getService() {
return service;
}

public void setService(String service) {
this.service = service;
}

public double getSalaire() {
return salaire;
}

public void setSalaire(double salaire) {
this.salaire = salaire;
}

public String toString() {
StringBuffer buf = new StringBuffer();
buf.append(" Employé n°: " ).append(id).append("\n");
buf.append(" Nom : " ).append(getNom()).append("\n");
// etc....
return buf.toString();
}
}

public static void main(String[] args) {
GestionEmploye ge = new GestionEmploye();
int rep = 1;
do {
System.out.println("Saisir le nom de l'employe ");
String nom =clavier.readLine();
System.out.println("Saisir le service de l'employe");
String service=clavier.readLine();
System.out.println("Saisir le salaire de l'employe");
double salaire=Double.parseDouble(clavier.readLine());
ge.addEmploye(nom, service, salaire);
System.out.println("Voulez vous ajouter un autre employe ?(1:oui/0:non)");
rep=Integer.parseInt(clavier.readLine());
}while(rep!=0);
}
}
0