A voir également:
- Java :Problème d'affichage
- Waptrick java football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Jeux java itel football - Télécharger - Jeux vidéo
- Jeux java itel 5360 - Forum Mobile
- Télécharger jeux java gameloft gratuit - Forum Mobile
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
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
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
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!
Utilisateur anonyme
25 mars 2008 à 06:52
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
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
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);
}
}
* 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);
}
}