我搜索了網頁,但沒有找到答案。這是我的問題。 這裏的目標是在我的第一個構造函數中使用我的驗證(如果codeForme < 0 || codeforme> 9)...等,因爲我的另外兩個構造函數正在調用第一個構造函數。在另一個構造函數中調用構造函數(並從cons.1中獲取修改後的變量)
但是,當我在我的第二個構造函數中輸入例如codeforme = 20時,它沒有被修改,因爲它應該在運行第一個構造函數之後。我知道這個問題可能來自this.codeForme = forme,因爲它從我的參數的forme而不是從第一個codeForme開始。 應該有一個簡單的方法,謝謝!
這是到目前爲止我的代碼:
public class carteMere {
// variable(s) de classe s'il y a lieu
private static int identifiant = 0;
// variable(s) d'instance s'il y a lieu
private String marque;
private int codeForme = 0;
private int capaciteMaxMemoire = 8;
private int memoireInstalle = 0;
private int codeCarte;
// constructeur(s) s'il y a lieu
public carteMere(String marque,
int codeForme,
int capaciteMaxMemoire,
int memoireInstalle) {
this.marque = marque;
this.identifiant = identifiant+1;
this.codeCarte=this.identifiant;
if(codeForme < 0 || codeForme > 9){
codeForme = 0;
}
if(capaciteMaxMemoire<=0){
capaciteMaxMemoire = 8;
}
if(memoireInstalle < 0){
memoireInstalle = 0;
}else if (memoireInstalle> capaciteMaxMemoire){
memoireInstalle = capaciteMaxMemoire;
}
codeForme = codeForme;
capaciteMaxMemoire = capaciteMaxMemoire;
memoireInstalle = memoireInstalle;
}
public carteMere(int forme, int capaciteMax, int memoireInstalle){
this("ASUS", forme, capaciteMax, memoireInstalle);
this.codeForme = forme;
this.capaciteMaxMemoire = capaciteMax;
this.memoireInstalle = memoireInstalle;
this.codeCarte=this.identifiant;
}
public carteMere(int codeForme, int memoireInstalle){
this(codeForme, 8, memoireInstalle);
this.codeForme=codeForme;
this.memoireInstalle=memoireInstalle;
this.identifiant = identifiant;
this.codeCarte=this.identifiant;
}
編輯:
如果我做的: carte1 =新carteMere(10,8);
然後我檢查carte1,codeForme是10,它應該是0,因爲它應該在第一個構造函數中被修改。
有沒有辦法通過第一個構造函數的驗證,當我使用第二個(這個叫第一個)。或者我只是複製粘貼這些if/else? 謝謝 – 2014-12-02 22:47:41
您首先應該與您的命名一致:codeForme和forme用於您的不同構造函數中的相同參數,這有點令人困惑且難以閱讀。在設置實例變量時,你也應該總是使用「this」,而不是在第一個構造函數的末尾。也許只是這樣,你將能夠更好地閱讀你的代碼,並瞭解發生了什麼 – realUser404 2014-12-02 23:28:34