【问题标题】:If Else AssignmentOperator Issues - JavaIf Else AssignmentOperator 问题 - Java
【发布时间】:2017-10-05 03:50:22
【问题描述】:

我是 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 Expression”以完成Expression”

我确信我的代码有些愚蠢,但我能找到的示例有点超出我的想象,无法找出差异。

【问题讨论】:

  • if 是一个语句,而不是一个表达式。所以它没有价值。
  • 您不能返回 if (...) 块。有几种方法可以解决这个问题。一个简单的解释是删除 "if (this...) 之前的 "return",并在每个 "(this.time - ...) 之前的同一行和之前放置一个 "return"
  • 我试图做的是根据 this.time 产生一个“分数”,除非运动员在第一、第二或第三名,在这种情况下你会从他们的分数,有点像高尔夫。编辑:你的修复工作,Savlon。太感谢了。我永远不会想到这一点。

标签: java syntax-error


【解决方案1】:

您不能在 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;
    }
  }

【讨论】:

    【解决方案2】:

    与您在这里尝试做的最接近的是嵌套条件运算符:

    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 statementnot an expression

    【讨论】:

    • 不使用它的实际原因是您不能使用调试器轻松地单步执行它。
    【解决方案3】:

    您没有正确返回值。如果要立即返回值,则必须对每个条件使用 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;
    }
    

    对于多个 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;
    }
    

    【讨论】:

    • 这并不完全符合 OP 试图做的事情。它具有改变字段值的副作用; OP没有要求的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多