axelvdk
Messages postés41Date d'inscriptiondimanche 26 août 2012StatutMembreDernière intervention30 mai 2013
-
19 mai 2012 à 16:32
axelvdk
Messages postés41Date d'inscriptiondimanche 26 août 2012StatutMembreDernière intervention30 mai 2013
-
20 mai 2012 à 12:38
Bonjour à tous,
J'ai un code qui fait pas ce à quoi je m'attends, il s'agit d'un exercice qui comporte 3 classes (Entreprise, Contrat et sa sous-classe Cdd ou pour contrat à durée déterminée).
Le main de tout ça crée une entreprise en donnant sa taille (nombre de contrat) comme argument au constructeur public Entreprise(int taille){} qui initialise un tableau avec cette taille. C'est dans ce tableau qu'on mettra tout les contrats et on pourra les afficher grâce à une méthode de la classe Entreprise.afficheContrat().
Dans Entreprise j'ai ajoutContrat(Contrat c){dans laquelle je mets le nouveau contrat à l'indice suivant du tableau}.
Le problème est le suivant, je dois mettre un numéro de contrat qui s'incrémente à chaque nouvelle instanciation de l'objet Contrat. J'ai donc mis un champ protected static int numContrat=0; qui est incrémenté grâce au constructeur à chaque fois qu'on l'appelle.
public class Contrat{
protected static int numContrat=0;
protected String nom;
protected String dateEmbauche;
protected float salaire;
public Contrat(String nom, String dateEmbauche, float salaire){
this.numContrat++;
this.nom=nom;
this.dateEmbauche=dateEmbauche;
this.salaire=salaire;
}
public String toString(){
String str = new String("Monsieur : "+this.nom+" Contrat n : "+numContrat+" engagé le "+dateEmbauche+" salaire mensuel brut de : "+salaire);
return str;
}
}
Le problème à l'exécution est qu'il affiche contrat N°4 pour tout les contrats (j'en fais 4 en tout) et non pas 1, 2, 3 ,4.
J'ai essayé pas mal de truc avec les this, super etc... rien n'y fait. A ce propos, qui sait ce que ça veut dire IncompatibleClassChangeError: static field expected ? En quoi est ce nécessaire de mettre un champ static ou pas pour la compilation (vu qu'il sait pas ce que je veux comme résultat?)
Un grand merci en tout cas à ceux qui prendront la peine de me lire,
axelvdk
Messages postés41Date d'inscriptiondimanche 26 août 2012StatutMembreDernière intervention30 mai 20131 20 mai 2012 à 12:38
Salut, ça marche merci,
En fait la variable static reste à la dernière valeur qu'on lui a donnée, et ce peut importe l'objet instancié.
Si mnt je l'initialise à 2, elle va rester sur deux pour tt les objets.
Dans le cas d'incrémentation elle va se "réinitialiser" incrémentée de 1 à chaque nouvel objet et lors de l'affichage elle aura la dernière valeur qu'elle aura eu pour tout les objets.
C'est en gros une variable globale ou du moins elle correspond à ce qui serait une variable déclarée dans le main.
C'est sympas d'avoir répondu, ça fait un soucis en moins pour l'exam.