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”而不是人名。- 如果第 1、第 2 和第 3 条不正确并且返回 n/a,我正在尝试编写 IF 语句。

4

4 回答 4

1

不要使用=运算符来比较boolean值——这是赋值运算符,所以它总是true. 它已经boolean,只需使用:

} else if (hasFinished) {

此外, it'sfalse或 it's true,因此不需要第三种情况。你可以删除

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

无论如何,这在语法上是不正确的。

于 2013-10-02T16:09:14.730 回答
0

你永远不会被details += "n/a"处决有两个原因:

  1. 您分配hasFinished给(正如其他人指出的那样)trueif

    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 {
        ...
    }
}
于 2013-10-02T16:12:15.487 回答
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;
}

如果您希望允许少于三个竞争对手,但仍显示第 1/2/3 个,您可以使用三元比较并将 else-if 子句替换为 else。

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;
}
于 2013-10-02T16:18:01.517 回答
0

=用于赋值,==用于比较。在以下语句中使用==代替:=

else if  (hasFinished = true)

这实际上将分配 hasFinished 值 true 并且条件将始终被评估为 true。将其更改为:

else if  (hasFinished == true)

进行比较而不是分配

于 2013-10-02T16:09:02.613 回答