2013-10-02 33 views
0
public String toString() { 

String details = number + ", " + RACE_DESCRIPTIONS[typeIndex] + "[" + date + "]" + ":"; 
if (!hasFinished) { 
    details += "Race not finished"; 
} else if (hasFinished = true) { 
    details += "\n  1st: " + competitors[0].getName(); 
    details += "\n  2nd: " + competitors[1].getName(); 
    details += "\n  3rd: " + competitors[2].getName(); 
} else if { 
    details += "n/a"; 
} 
return details; 

如果沒有設置位置,則應該返回字符串字面值「n/a」而不是人名。 - 我試圖編寫一個IF語句,如果第一,第二和第三不正確,並且返回n/a。關於if語句的詢問

+0

不要使用'='。這是分配操作員。另外'如果'預計一個條件。 –

+0

代碼使它看起來像hasFinished可以有三種狀態:真,假和其他??不是hasFinished布爾? –

+0

你特別聲明你想要3個子句。你究竟想要測試什麼? – James

回答

0

你永遠不會得到details += "n/a"的原因有兩個執行:

  1. 你在if分配hasFinishedtrue(其他人點):

    else if (hasFinished = true) 
    

    應該

    else if (hasFinished) 
    
  2. 比這更重要的,你的代碼有以下形式:

    if (false) { 
        ... 
    } else { 
        if (true) { 
        } else { 
         //this is false, it was supposed to be hitted before 
        } 
    } 
    

所以,即使你做的第一個定位,背後的邏輯沒有任何意義。您應該在第二個if中使用另一個評估來處理最後的else聲明。例如:

if (!hasFinished) { 
    ... 
} else { 
    //the hasFinished usage here has no sense, being commented 
    //just left it to show this is supported 
    //if (hasFinished && someValue <= someOtherValue) { 
    if (someValue <= someOtherValue) { 
     ... 
    } else { 
     ... 
    } 
} 
+0

我可以指定「&&」大於還是小於布爾表達式? – user2839383

+0

@ user2839383是的,你可以。 –

+0

將不同的名稱分配給不同的數組值。我是否必須特別提及三個和三個以上的名稱以啓動第三個陳述?它們都被分配到不同的值,稱爲位置變量。 – user2839383

0

=用於賦值,==用於比較。在下面的語句使用==,而不是=

else if (hasFinished = true) 

這實際上賦予hasFinished值爲true,也是條件將始終評估爲true。將其更改爲:

else if (hasFinished == true) 

做了對比,而不是分配

1

不要使用=運營商的比較boolean值 - 這是賦值運算符,所以它總是true。它已經boolean,只需使用:

} else if (hasFinished) { 

此外,無論是它的false或者它true,所以沒有必要對第三種情況。您可以刪除

else if { 
    details += "n/a"; 
} 

無論如何,這在語法上是不正確的。

+0

OP不想刪除該部分,請注意,問題是關於如何到達該代碼塊。 –

0

基本上,你需要檢查你是否真的有三個終結者,這就構成了你的else-if子句。

public String toString() 
{ 
    String details = number + ", " + RACE_DESCRIPTIONS[typeIndex] + "[" + date + "]" + ":"; 
    if(!hasFinished) // The race has not yet finished. 
    { 
     details += "Race not finished"; 
    } 
    else if(competitors.length >= 3) // Implies that hasFinished evaluated to true 
    { 
     details += "\n  1st: " + competitors[0].getName(); 
     details += "\n  2nd: " + competitors[1].getName(); 
     details += "\n  3rd: " + competitors[2].getName(); 
    } 
    else // The race has finished, but there are less than three competitors 
    { 
     details += "n/a"; 
    } 
    return details; 
} 

如果你想允許少於三個競爭對手,但仍然顯示第一/二/三,你可以使用一個三態比較,並與其他人取代你的別的,如果條款。

public String toString() 
{ 
    String details = number + ", " + RACE_DESCRIPTIONS[typeIndex] + "[" + date + "]" + ":"; 
    if(!hasFinished) 
    { 
     details += "Race not finished"; 
    } 
    else // Implies that hasFinished evaluated to true 
    { 
     details += "\n  1st: " + (competitors.length >= 1 ? competitors[0].getName() : "n/a"); 
     details += "\n  2nd: " + (competitors.length >= 2 ? competitors[1].getName() : "n/a"); 
     details += "\n  3rd: " + (competitors.length >= 3 ? competitors[2].getName() : "n/a"); 
    } 
    return details; 
} 
+0

如果參賽者還沒有參加比賽,我應該怎麼做才能出現?例如: 1st:David 2nd:n/a 3rd:n/a – user2839383

+0

@ user2839383 - 然後使用第二個'toString()'而不是第一個;它基本上根據個人基礎進行檢查,實際上是第一名罰分,第二名罰分等。 –

+0

我可以在沒有任何機會的情況下使用第二個toString()嗎? – user2839383