2014-12-02 105 views
0

我搜索了網頁,但沒有找到答案。這是我的問題。 這裏的目標是在我的第一個構造函數中使用我的驗證(如果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,因爲它應該在第一個構造函數中被修改。

+0

有沒有辦法通過第一個構造函數的驗證,當我使用第二個(這個叫第一個)。或者我只是複製粘貼這些if/else? 謝謝 – 2014-12-02 22:47:41

+0

您首先應該與您的命名一致:codeForme和forme用於您的不同構造函數中的相同參數,這有點令人困惑且難以閱讀。在設置實例變量時,你也應該總是使用「this」,而不是在第一個構造函數的末尾。也許只是這樣,你將能夠更好地閱讀你的代碼,並瞭解發生了什麼 – realUser404 2014-12-02 23:28:34

回答

1

使用this來限定您的實例變量,如您對marque,indentifiantcodeCarte所做的那樣。在if s上也可使用else將變量分配爲正常值(如果不在驗證範圍之外)。例如。對於codeForme

if(codeForme < 0 || codeForme > 9) { 
    this.codeForme = 0; 
} 
else { 
    this.codeForme = codeForme; 
} 

,類似的還有capaciteMaxMemoirememoireInstalle

+0

謝謝,但它不能解決問題我仍然無法找到一種方法來獲得正確的修改變量時調用第二或第三構造函數。 – 2014-12-02 22:49:04

+0

讓第一個構造函數完成分配實例變量的所有工作。它不能修改由其他構造函數傳入的參數,因爲它傳遞了這些變量的副本。在第一個構造函數中修改這些值只會修改本地副本,所以更改無法顯示在其他構造函數的值中。在其他構造函數中,使用'this'調用第一個構造函數的地方,刪除嘗試爲實例變量賦值的行;讓第一個構造函數分配一切。 – rgettman 2014-12-02 22:53:07

+0

因此,如果在其他構造函數中使用/ else,則無法跳過編碼相同的驗證? – 2014-12-02 23:00:10

相關問題