对象创建中的构造函数,设定器,Getter问题



我正在创建一个基于多个变量(例如(nenee),Brand),Brand(Marque),Color(Couleur)差异仪(KiloMetrage)等多个变量的汽车,出售(vendue),变速器(自动机),评论(评论)和门数(nbrportes)。

代码中的论点是法语,因为我在法国大学,所以请忍受我。

我的代码需要与现在(强加)完全具有设置器,构造函数和克隆方法。我自己做了getters和Idnumber和Compteurvendue(已售出的汽车数量)的增量。

这是我所拥有的代码:

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

我代码的多个部分目前尚不正常:

  • 汽车的第一个构造函数在我在bluej环境中进行测试时接受我的变量输入,但是布尔值(vendue and automatique)总是以false的形式出现,并且评论总是以comm_defaut(comm_defaut(empty string'')出现。。

  • 即使我输入有效值,第二个构造函数即使在我的情况下将所有内容都作为默认值。布尔人和评论仍然存在相同的问题。

  • 我不明白如何创建一个" class getter" ...在这种情况下的目的

  • iDnumber总是以1为1。它不会保存在我创建每个新对象之间的内存中。

  • 我觉得我的克隆方法是正确的,但是我无法打电话或测试它甚至可以创建默认的汽车。

***请记住,除了私人变量和getter方法之外更难)。

我该怎么办来解决我在代码中遇到的这些不同的问题?非常感谢您,因为这个社区已经非常有帮助!

第一个构造函数自动机和注释: 作为错字或复制/粘贴问题:)

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

尖头行有什么?其实它等于

this.automatique = this.a; 

不是构造函数的自动参数。

那么,有两个变量A和Automatique的原因是什么?(对他人也一样)。 然后

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

根本没有任何意义。布尔a只能是真实的,或者是错误的,那么如果?

的结果是什么

因此,删除不需要的重复变量。 然后进行此模式:

// 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;
}

就是这样。

最新更新