2017-02-14 57 views
1

我試圖檢查另一個類別中的另一個對象的人年齡,由於某些原因areThey布爾返回false無論如何。下面的代碼是我實現,確保對方如果語句對象布爾不工作

public class main {  
    public static void main(String[] args){  
     Obj object = new Obj();  
     object.areTheyOldEnough(); 

     if(object.areTheyOldEnough() == true){ 
      System.out.println("They are old enough!"); 
     }else{ 
      System.out.println("They are not old enough!"); 
     } 
    } 
} 

public class Obj { 
    private int age = 15; 
    private boolean areThey; 

    public boolean areTheyOldEnough() { 
     if (age > 12) { 
      boolean areThey = true; 
     } 
     return areThey;  
    } 
} 
+0

調用一個類「Object」的實例並不是一個好主意。您應該閱讀命名約定。 –

+0

獨立地你的問題你應該知道:類名應該是名詞,與大寫的每個內部單詞的第一個字母混合使用。 (http://www.oracle.com/technetwork/java/codeconventions-135099.html)。我的意思是你應該定義你的類:public class Obj – limonik

+0

除此之外'if(booleanMethod()== true)'也是不好的做法。你看,'如果(areTheOldEnough())'更容易閱讀! – GhostCat

回答

4

你的問題被稱爲陰影;在這裏:

最內聲明:

if (age > 12) { 
    boolean areThey = true; 

根本就是錯誤的,應該改爲:

areThey = true; 

代替。重點是:您正在聲明新的該名稱的變量,並給出值true。但是,當if-block「左」時,那個變量消失在空氣中......並且返回的是obj類中的字段areThey的值。而那一個仍然有其初始默認值爲false

而且,除此之外:命名是您的代碼中的真正問題。使用A)符合Java編碼標準的名稱;所以類名以UpperCase爲例, B)的意思是的東西。

換句話說:名稱對象並不意味着什麼(除了創建另一個與java.lang.Object類名衝突的名稱)。最好稱之爲「testInstance」或類似的東西 - 如上所述:使用名稱的意思是的東西。

0

你有兩個相同名稱的布爾變量 - 一個是局部變量,你在你的方法中設置(在if塊內),另一個是你返回的實例變量。

你不需要任何布爾變量,只寫:

public boolean areTheyOldEnough() { 
    return age > 12; 
} 
0

你場和局部變量的混合能見度

public class obj { 

public int age = 15; 
public boolean areThey; //initialized to false as default value for boolean 

public boolean areTheyOldEnough() { 
    if (age > 12) { 
     boolean areThey = true; //create new local variable with the same name as field, 
           // but visible just in scope of if-block 
    } 
    return areThey; // return value from field 
} 
0

糾正你的代碼如下:

public class main { 

public static void main(String[] args){ 

    obj Object = new obj(); 

    if(obj.areTheyOldEnough()){ 
     System.out.println("They are old enough!"); 
    } else{ 
     System.out.println("They are not old enough!"); 
    } 
} 

和你的obj類將是:

public class obj { 
public int age = 15; 
// it is not required, but if you need for other methods, 
// you can define it 
public boolean areThey; 

public boolean areTheyOldEnough() { 
    return age > 12; 
    // or if you need set variable areThey, so use following codes 
    /* 
     areThey = age > 12; 
     return areThey; 
    */ 
}