2014-12-02 104 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

相关问题