Java tableau d'objets

Bonjour,

J'ai quelques difficultés avec la POO, j'arrive a faire des tableaux. Mais je n'arrive pas a faire un tableau d'objet dans ce programme:
Je n'arrive pas a creer un tableau de Contribuable.

package contribuable;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
CalculateurImpot calculateurImpot = new CalculateurImpot();
Contribuable contribuable = new Contribuable();
DialogueUtilisateur du = new DialogueUtilisateur(contribuable, calculateurImpot);
du.demarrer();
}
}

public class Contribuable {
private String nom;
private String prenom;
private double revenus;

public String getNom() {
return nom;
}

public String getPrenom() {
return prenom;
}

public double getRevenus() {
return revenus;
}

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

public void setPrenom(String prenom) {
this.prenom = prenom;
}

public void setRevenus(double revenus) {
this.revenus = revenus;
}

}

public class CalculateurImpot {
private double limites[];
private double taux[];

public CalculateurImpot(){
limites = new double[7];
taux = new double[7];

for(int i=0; i<limites.length; ++i){
limites[i] = i*5000.0;
taux[i] = 0.10+(i*0.05);
}
taux[0] = 0.0;
}

public double calculerImpot(double revenu){
int i=0;
double impot = 0;
while(i<limites.length-1 && revenu>limites[i+1]){
impot += 5000*taux[i];
++i;
}//ici i=6 ou revenu <= limites[i+1]
impot += (revenu - limites[i])*taux[i];
return impot;
}

}

public class DialogueUtilisateur {
private Contribuable contribuable;
private CalculateurImpot calculateurImpot;
private Scanner input;

public DialogueUtilisateur(Contribuable contribuable, CalculateurImpot calculateurImpot){
this.contribuable = contribuable;
this.calculateurImpot = calculateurImpot;
input = new Scanner(System.in);
}
public void demarrer(){
int choix = 0;
do{
choix = encoderChoix();
switch(choix){
case 1: encoderContribuable(); break;
case 2: calculerImpot(); break;
default: break;
}
}while(choix!=3);
//ici,choix=3 ==> Sortie du programme
System.exit(0);

}
private int encoderChoix(){
int choix;
System.out.println("1. Encoder un contribuable");
System.out.println("2. Calculer l'impot");
System.out.println("3. Quitter");
System.out.print("Votre choix? ");

choix = input.nextInt();
input.nextLine();

return choix;
}
private void encoderContribuable(){
System.out.print("Nom: ");
String nom = input.nextLine();
System.out.print("Prénom: ");
String prenom = input.nextLine();
contribuable.setNom(nom);
contribuable.setPrenom(prenom);
System.out.print("Revenu en euros : ");
contribuable.setRevenus(input.nextDouble());
input.nextLine();
}
private void calculerImpot(){
double impotDu = calculateurImpot.calculerImpot(contribuable.getRevenus());
System.out.printf("Nom: %s \t Prénom: %s \n", contribuable.getNom(), contribuable.getPrenom());
System.out.printf("Revenu : %.2f \tImpot du : %.2f\n",contribuable.getRevenus(),impotDu);
}
}

1 réponse

  1. Modérateur
    Il n'y a pourtant pas de différences avec un tableau de types primitifs :

    Contribuable[] tableau = new Contribuable[taille_du_tableau];
    1. quand je fais ca, mon programme plante au moment de devoir rentrer le revenu du premier contribuable
    2. je crois avoir pigé, faut que je modifie tout mon dialogueUtilisateur

      rajouter la taille du tableau en parametre de encoderContribuable()
    3. apres ca faut que je modifie encoderContribuable() de façon a ce que les input s'encodent dans le bon objet du tableau. Mais je sais pas du tout comment faire. Je ne vois absolument pas comment faire.

      public class DialogueUtilisateur {
      private Contribuable contribuable;
      private CalculateurImpot calculateurImpot;
      private Scanner input;

      public DialogueUtilisateur(Contribuable contribuable, CalculateurImpot calculateurImpot){
      this.contribuable = contribuable;
      this.calculateurImpot = calculateurImpot;
      input = new Scanner(System.in);
      }
      public void demarrer(){
      int choix = 0;
      do{
      choix = encoderChoix();
      switch(choix){
      case 1: encoderContribuable(); break;
      case 2: calculerImpot(); break;
      default: break;
      }
      }while(choix!=3);
      //ici,choix=3 ==> Sortie du programme
      System.exit(0);

      }
      private int encoderChoix(){
      int choix;
      System.out.println("1. Encoder un contribuable");
      System.out.println("2. Calculer l'impot");
      System.out.println("3. Quitter");
      System.out.print("Votre choix? ");

      choix = input.nextInt();
      input.nextLine();

      return choix;
      }
      private void encoderContribuable(){
      System.out.print("Nom: ");
      String nom = input.nextLine();
      System.out.print("Prénom: ");
      String prenom = input.nextLine();
      contribuable.setNom(nom);
      contribuable.setPrenom(prenom);
      System.out.print("Revenu en euros : ");
      contribuable.setRevenus(input.nextDouble());
      input.nextLine();
      }
    4. logiquement grace a la methode:
      DialogueUtilisateur du = new DialogueUtilisateur(contribuable[i], calculateurImpot[i]);

      c'est sencé directement creer l'objer au bon endroit dans le tableau.

      je ne comprend pas pourquoi ca plante
    5. j'ai juste modifié ca:

      public static void main(String[] args) {
      CalculateurImpot[] calculateurImpot = new CalculateurImpot[5];
      Contribuable[] contribuable = new Contribuable[5];
      for(int i=0; i<5 ; i++){
      DialogueUtilisateur du = new DialogueUtilisateur(contribuable[i], calculateurImpot[i]);
      du.demarrer(i);
      }