2017-05-06 10 views
0

私はJavaクラスの初めの生徒なので、おそらくあなた達には馬鹿に見えます。ここにコードがあります。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式を』エラー挿入し、構文エラーを」

私はそれが私のコードで起こって愚かなものだと確信していますが、私はできる例findは私の頭の少し上の違いを把握するためです。

+2

'if'は式ではなく、式です。だから、それは価値がない。 –

+2

if(...)ブロックを返すことはできません。これを解決できる方法はいくつかあります。簡単な説明は、 "if(this ... ...)"の前に "return"を削除し、everyと同じ行に "return"を置くことです。 "(this.time - ...) – Savlon

+0

アスリートが第1位、第2位、または第3位にいない限り、これを試してみると、このスコアに基づいた「スコア」が得られました。その場合、ゴルフのようなスコアから少しを引きます。 編集:あなたの修正が働いた、Savlon。どうもありがとうございます。私は決してそれを理解していないでしょう。 – Whibble

答えて

4

ifステートメントをJavaで返すことはできません。他の言語(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

値を適切に戻していません。値を直ちに返す場合は、各条件に対してreturnを使用する必要があります。複数の場合

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; 
} 

場合/他-場合は、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