2017-05-06 72 views
0

我是Java課程的開始學生,所以這對你們來說可能看起來很愚蠢。這是代碼。If Else AssignmentOperator Issues - Java

class CyclingResult implements IEvent { 
    double time; 
    int finishOrder; 

    CyclingResult(double time, int finishOrder) { 
    this.time = time; 
    this.finishOrder = finishOrder; 
    } 

    public double pointsEarned() { 
    return if (this.finishOrder == 1) { 
     (this.time - 10); 
    } else if (this.finishOrder == 2) { 
     (this.time - 7); 
    } else if (this.finishOrder == 3) { 
     (this.time - 3); 
    } else { 
     this.time; 
    } 
    } 
} 

我弄一套5「錯誤:語法錯誤,插入‘AssignmentOperator表達’,以完整地表達」

我敢肯定,這是我的代碼去上一些愚蠢的事,但我的例子能發現是有點高於我的頭來找出差異。

+2

'if'是一個語句,而不是一個表達式。所以它沒有價值。 –

+2

您不能返回if(...)塊。有幾種方法可以解決這個問題。一個容易解釋的就是在「if(this ...)」之前刪除「return」並將「return」放在與之前相同的行上「(this.time - ...) – Savlon

+0

我是什麼試圖做到這一點是基於這個時間產生一個「得分」,除非運動員在第一,第二或第三位,在這種情況下,你會從他們的分數中減去一點,就像打高爾夫球一樣。 編輯:您的修復工作,Savlon。非常感謝。我從來不會想到這一點。 – Whibble

回答

4

您不能在Java中返回if語句。與其他語言(如Scala)不同,if語句就是:一個語句(沒有值)。

反而需要分別在每個if/else塊內部返回。

public double pointsEarned() { 
    if (this.finishOrder == 1) { 
     return (this.time - 10); 
    } else if (this.finishOrder == 2) { 
     return (this.time - 7); 
    } else if (this.finishOrder == 3) { 
     return (this.time - 3); 
    } else { 
     return this.time; 
    } 
    } 
0

你無法正常返回值。如果要立即返回值,則必須針對每個條件使用返回值。

public double pointsEarned() { 
    if (this.finishOrder == 1) { 
     return (this.time - 10); 
    } else if (this.finishOrder == 2) { 
     return (this.time - 7); 
    } else if (this.finishOrder == 3) { 
     return (this.time - 3); 
    } 
    return this.time; 
} 

對於多的if/else-if語句,你應該考慮使用switch語句:

public double pointsEarned() { 
    switch (this.finishOrder) { 
     case 1: 
      return (this.time - 10); 
     case 2: 
      return (this.time - 7); 
     case 3: 
      return (this.time - 3); 
     default: 
      break; 
    } 
    return this.time; 
} 
+3

這不正是OP所要做的。它具有改變字段值的副作用; OP沒有要求的東西。 –

+0

@KlitosKyriacou謝謝你指出。我的錯! – Adrian

1

的最接近你想在這裏做什麼是一個嵌套的條件運算符:

return (this.finishOrder == 1) ? (this.time - 10) 
    : (this.finishOrder == 2) ? (this.time - 7) 
    : (this.finishOrder == 3) ? (this.time - 3) 
    : this.time; 

您不能使用return if ...,因爲if is a statement,not an expression

+1

不使用它的實際原因是,您無法輕鬆地通過調試器來瀏覽它。 – Radiodef