2013-03-15 208 views
0

我試圖執行toString方法,並且toString的輸出取決於boolean變量。以下是我的課程和主要內容。if和else語句

public class Cell { 

    public int addSpaces; 
    boolean isEmpty; 
    boolean isChute; 
    boolean isLadder; 

    public Cell() { 
     addSpaces = 10; //I initialized addSpaces to 10 for testing purpose 
    } 

    public boolean isChute() { //first boolean method 
     if (addSpaces == -10) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    public boolean isLadder() {//second boolean method 
     if (addSpaces == 10) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    public boolean isEmpty() { //third boolean method 
     if (addSpaces == 0) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    public String toString() { 
     String print; 
     if (isChute = true) //if isChute is true return true. 
     { 
      print = "C10";  // toString output = "C10" 
     } else if (isLadder = true) // if isLadder is true return true 
     { 
      print = "L10";   // toString output == "L10" 
     } else { 
      print = "---"; // else toString print output = "---" 
     } 
     return print; 
    } 

    public static void main(String[] arg) { 
     Cell s = new Cell(); 

     System.out.println(s.addSpaces); 
     System.out.println(s); 
    } 
} 

不管toString輸入狀態的,我基本上得到了相同的輸出「C10」。

有人能告訴我我做錯了什麼嗎?

我是新來這個網站,所以我很感激任何反饋,以備將來參考。謝謝。

+1

你應該有==內,如果不= – rajesh 2013-03-15 05:18:51

+0

您作爲使用賦值運算符=進行比較,因此只有第一個條件執行所有的時間。使用== – 2013-03-15 05:19:00

+0

謝謝@rajesh&Sudhanshu:是的,我嘗試使用if(==)而不是if(=),但輸出爲「---」。通過在if語句中使用==,它會跳過if和else if語句並轉到else語句。 – Phong 2013-03-15 05:25:08

回答

8

你已經掉進語言 「陷阱」

這一個...

if(isChute = true) //if isChute is true return true. 
    print = "C10";  // toString output = "C10" 
else if (isLadder = true) // if isLadder is true return true 
    print = "L10";   // toString output == "L10" 
else 
    print = "---" 

實際分配trueisChute。您應該使用===

更新

一個更好的辦法是......

if(isChute) //if isChute is true return true. 
    print = "C10";  // toString output = "C10" 
else if (isLadder) // if isLadder is true return true 
    print = "L10";   // toString output == "L10" 
else 
    print = "---" 

如果只有兩種狀態,該對象可以是(一個滑道或梯子),你可以簡單地使用

if(isChute) //if isChute is true return true. 
    print = "C10";  // toString output = "C10" 
else print = "L10";   // toString output == "L10" 

如果它可以有多於2個狀態,那麼我會改爲使用enum type

+0

我這個方法的第一意圖是檢查布爾值是否爲真,並且toString的輸出取決於這些情況。我的方法錯了嗎?謝謝。 – Phong 2013-03-15 05:33:54

+0

不,你的方法沒有錯,但你試圖確定狀態的方式是 – MadProgrammer 2013-03-15 05:35:18

+0

我試過實現你的第一個方法,輸出是「---」。這似乎是if和else if語句是錯誤的。我嘗試了一種不同的方法來檢查我的布爾方法。的System.out.println(s.isLadder); System.out.println(s.isChute); System.out.println(s.isEmpty);並且輸出是錯誤的,錯誤的,錯誤的。這是否會成爲影響if語句的原因?謝謝 – Phong 2013-03-15 05:43:57

0

isChute被分配爲true。所以「C10」一直由toString()返回。 改變它

if(isChute){ 
    ... 
}else if(isLadder){ 
    ... 
}else{ 
    .. 
} 
+0

謝謝Nandakisshore,但如果我不把==或=放在if語句中,只有否則如果會得到執行。 – Phong 2013-03-15 05:47:26

+0

您已命名與該變量相同的功能。 所以,如果你想要函數返回值作爲表達式值,那麼isChute()必須用在if語句的表達式字段中。 – Kishore 2013-03-15 05:54:31