简体   繁体   中英

Constructor, Setter, Getter issue in an object creation

I am creating a class to make cars, based on multiple variables such as year (annee), brand (marque), color (couleur) odometer (kilometrage), sold (vendue), transmission (automatique), comment (commentaire) and number of doors (nbrPortes).

The arguments inside the code are in French because I am in a French university, so please bear with me.

My code needs to have the setters, the constructors and the cloner methods exactly as they are right now (imposed). I made the getters and the incrementation for IDnumber and compteurvendue (number of sold cars) myself.

Here is what I have as code:

public class Automobile {

    private static final String[] COULEURS = { "Autre", "Noir", "Blanc", "Bleu Nuit", "Bleu Clair", "Vert Pomme", "Vert Bouteille", "Taupe", "Argent", "Sable", "Gris Charbon", "Gris Clair", "Orange", "Rouge", "Jaune", "Brun" };

    private static final String[] MARQUES = { "Autre", "Mazda", "Toyota", "Ford", "GM", "Hyunday", "BMW", "SAAB", "Honda", "Mitsubishi", "Mercedes", "KIA", "Wolkswagen"};    


    public static final int COULEUR_DEF = 8;
    public static final int COULEUR_MIN = 0;
    public static final int COULEUR_MAX = COULEURS.length - 1;

    public static final int MARQUE_DEF = 4;
    public static final int MARQUE_MIN = 0;
    public static final int MARQUE_MAX = MARQUES.length - 1;

    public static final double KILO_DEFAUT = 55000;
    public static final double KILO_MIN = 15000;
    public static final double KILO_MAX = 140000;

    public static final int DEUX_PORTES = 2;
    public static final int QUATRE_PORTES = 4;
    public static final int PORTES_DEFAUT = QUATRE_PORTES;

    public static final boolean AUTO_DEF = true;
    public static final int ANNEE_MIN = 1997;
    public static final int ANNEE_MAX = 2016;
    public static final int ANNEE_DEFAUT = 2007;

    public static final String COMM_DEFAUT = "";

    public static final boolean VENDUE_DEF = false;

    //private variables

    private int marque;
    private int annee;
    private int couleur;
    private boolean a;
    private boolean automatique;
    private double k;
    private double kilometrage;
    private int p;
    private int nbrPortes;
    private String c;
    private String commentaire;
    private boolean v;
    private boolean vendue;
    private int compteurvendue = 0;

    private int IDnumber = 0;

// CONSTRUCTORS. I do not know I have to make 2, I am thinking for the purpose of the cloning without copying certain variables? I'm confused about this.

    public Automobile (int marque, int annee, int couleur, boolean automatique, double kilometrage) {


        if (marque>= MARQUE_MIN && marque <= MARQUE_MAX) {
            this.marque = marque;
        } else {
            this.marque = MARQUE_DEF;
        }

        if (annee>= ANNEE_MIN && annee <= ANNEE_MAX) {
            this.annee = annee;
        } else {
            this.annee = ANNEE_DEFAUT;
        }

        if (couleur>= COULEUR_MIN && couleur <= COULEUR_MAX) {
            this.couleur = couleur;
        } else {
            this.couleur = COULEUR_DEF;
        }

        if (a == true || a == false) {
            this.automatique = a;
        } else {
            this.automatique = AUTO_DEF;
        }

        if (k >= KILO_MIN && k <= KILO_MAX) {
            this.kilometrage = k;
        } else {
            this.kilometrage = KILO_DEFAUT;
        }

        this.IDnumber = IDnumber + 1;

    }

    public Automobile (int marque, int annee, int couleur, boolean automatique, double kilometrage,
                    int nbrPortes, String commentaire, boolean vendue){

        if (marque>= MARQUE_MIN && marque <= MARQUE_MAX) {
            this.marque = marque;
        } else {
            this.marque = MARQUE_DEF;
        }

        if (annee>= ANNEE_MIN && annee <= ANNEE_MAX) {
            this.annee = annee;
        } else {
            this.annee = ANNEE_DEFAUT;
        }

        if (couleur>= COULEUR_MIN && couleur <= COULEUR_MAX) {
            this.couleur = couleur;
        } else {
            this.couleur = COULEUR_DEF;
        }

        if (a == true || a == false) {
            this.automatique = a;
        } else {
            this.automatique = AUTO_DEF;
        }

        if (k >= KILO_MIN && k <= KILO_MAX) {
            this.kilometrage = k;
        } else {
            this.kilometrage = KILO_DEFAUT;
        }

        if (p == DEUX_PORTES || p == QUATRE_PORTES) {
            this.nbrPortes = p;
        } else {
            this.nbrPortes = PORTES_DEFAUT;
        }

        if (c != "") {
            this.commentaire = c;
        } else {
            this.commentaire = COMM_DEFAUT;
        }

        if (v == true || v == false) {
            this.vendue = v;
        } else {
            this.vendue = VENDUE_DEF;
        } 

        this.IDnumber = IDnumber + 1; //The problem is that the IDnumber is 1 for every new instance I create, wether I have the this. in front or not.

    }


//HERE I AM SUPPOSED TO PUT IN A CLASS GETTER...I have not managed to make it work in any way

    public static Automobile getAutomobile() {
        return null; //just put a null return in the meantime so I can compile
    }

//GETTERS

    public int getAnnee() {
        return annee;
    } 

    public int getMarque() {
        return marque;
    } 

    public int getCouleur() {
        return couleur;
    } 

    public int getNbrPortes() {
        return p;
    } 

    public double getKilometrage() {
        return k;
    } 
    public boolean getVendue() {
        return v;
    } 
    public String getCommentaire() {
        return c;
    } 
    public boolean getAutomatique() {
        return a;
    } 

//Setters. According to the imposed settings, Not supposed to have any error message or correction in case of wrong input, it just goes right through?

    public void setAnnee ( int annee ) {
        //A COMPLETER
        if (annee >= ANNEE_MIN && annee <= ANNEE_MAX) {
            this.annee = annee;
        }
    }

    public void setMarque (int marque){
       //A COMPLETER
       if (marque >= MARQUE_MIN && marque <= MARQUE_MAX) {
           this.marque = marque;
       }
    }

    public void setCouleur (int couleur) {
      //A COMPLETER
      if (couleur >= COULEUR_MIN && couleur <= COULEUR_MAX){
          this.couleur = couleur;
      }
    }

    public void setNbrPortes (int p) {
        //A COMPLETER
        if (p == DEUX_PORTES || p == QUATRE_PORTES){
            this.p = p;
        }
    }

    public void setKilometrage (double k) {
        //A COMPLETER  
        if (k >= KILO_MIN && k <= KILO_MAX) {
            this.k = k;
        }
    }

    // This is supposed to count if I select a car as sold, and counts how many are sold in total (So I can later show it to the user)

    public void setVendue (boolean v) {

        if (v == true || v == false) {
            this.v = v;
        }
        if (v = true) {
            compteurvendue = compteurvendue + 1;
        }
    }

//Sets comment as long as it is not null
    public void setCommentaire (String c){

        if (c != null) {
            this.c = c;
        }
    }

    public void setAutomatique (boolean a){
        if (a == true || a == false) {
            this.a = a;
        }
    }

   //Supposed to be able to create a clone of the car with all the same variables except the comment and sold that are reverted to default, and the IDnumber which will be a new one (+1)

    public Automobile cloner () {
        Automobile Clone = new Automobile(marque,annee,couleur,a,k,p,COMM_DEFAUT,VENDUE_DEF);
        return Clone;
    }

} // Automobile

There are multiple parts of my code that are currently not working:

  • The first constructor for Automobile accepts my variable inputs when I test it in BlueJ environment, but the booleans (vendue and automatique) always come out as FALSE and the comment always comes out as COMM_DEFAUT (empty string "").

  • The second constructor brings everything out in my instance as the default value, even if I input valid values. the booleans and comment still have the same issue.

  • I don't understand how to create a "class getter"...and what its purpose would be in this case

  • The IDnumber always comes out as 1. It doesn't get saved in the memory between my creating each new object.

  • I feel like my cloner method is correct, but I cannot call on it or test it to create even a DEFAULT car.

***Please keep in mind that aside from the private variables and the getter methods, the headers of all the setters, constructors, the final variables and the cloner header are imposed and cannot be modified (which is what makes this so much harder).

What can I do to solve these different problems I'm having with my code? Thank you very much as this community has already been extremely helpful !

first constructor automatique and comments: there as typo or copy/paste issue :)

if (a == true || a == false) {
        **this.automatique = a;**
    } else {
        this.automatique = AUTO_DEF;
    }

pointed line does what? actually it is equal to

this.automatique = this.a; 

not automatique parameter from constructor.

then what is the reason to have two variables a and automatique at all? (same for others as well). then

if (a == true || a == false)

has no sense at all. boolean a can be only true or false so what is a result of that if?

so, remove unneeded duplicate variables. then go this pattern:

// holder
private int marque;

//constructor: sure there will be all other parameters as well
public Automobile (int marque)    
{
   //if it is needed to check between MIN and MAx do it as in your code. (not for boolean :) )
   this.marque = marque;
}

// getter
public int getMarque()
{
  return this.marque;
}
// setter 
public void setMarque(int marque)
{
   //if it is needed to check between MIN and MAx do it as in your code.
  this.marque = marque;
}

// cloner
public Automobile clone()
{
    // sure there will be all other parameters and logic as well
    Automobile clonedAuto = new Automobile(this.marque);
    return clonedAuto;
}

that's it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM