【问题标题】:Variable expected [duplicate]预期变量[重复]
【发布时间】:2016-03-22 21:39:00
【问题描述】:
private void calculateForEachQuestion() {
    ...
    if (questions.size() >= answers.size()) {
        answers.forEach(answer -> {
            if (questions.contains(answer))
                this.answer.setPoints((this.answer.getPoints())++);
                // Variable expected  ^                    
    });
}

我遇到的错误是:

意外的类型
必需:变量
找到:值

这句话有什么问题?

this.answer.setPoints((this.answer.getPoints())++);

【问题讨论】:

  • 您应该包含您看到的确切错误。
  • 如果后增量在 Java 中的工作方式与在 C 中的工作方式相同(很可能),那么 即使语法正确,您最终仍会得到相同的值。 ..
  • 我不认为你可以在一个值上使用++,它需要一个变量。请改用+1
  • 您似乎误解了this 的含义。
  • 为什么不直接写answer.setPoints(answer.getPoints()+1);

标签: java variables increment


【解决方案1】:

++ 运算符仅在应用于已声明的变量时才有意义。

此运算符将在integerlong 等中加一,并将结果原地保存到同一个变量中。

如果没有声明变量,结果就无处保存,这就是编译器报错的原因。

在这种情况下允许使用++ 运算符的一种方法是(不是最简洁的代码,而是为了说明这一点):

int myVariable = this.answer.getPoints();
myVariable++;
this.answer.setPoints(myVariable);

【讨论】:

    【解决方案2】:

    this.answer.getPoints() 将返回一个值,您不能在其上使用递增 ++ 或递减 --。您只能在变量上使用它。

    如果你想给它加1,你可以这样做:

    this.answer.setPoints((this.answer.getPoints())+1);
    

    我知道,但为什么呢?

    你可以这样做:

    int x = 5;
    x++; // x is a variable and can have value 6
    

    但不是这个:

    5++; // 5 is a value and can't have value 6
    

    【讨论】:

      【解决方案3】:

      改变这个:

      this.answer.setPoints((this.answer.getPoints())++);
      

      到:

      this.answer.setPoints((this.answer.getPoints())+1);
      

      ++ 会将变量加 1,但由于 this.answer.getPoints() 将返回一个值且它不是定义的变量,因此它无法存储增加的值。

      可以这样想: this.answer.getPoints() = this.answer.getPoints() + 1,增加的值会存储在哪里?

      【讨论】:

      • 为什么不省略this?这完全没有必要,不是吗?
      • @AndrewTobilko 因为你不能修改方法的返回值,而++ 修改了它所使用的变量?
      【解决方案4】:

      错误就在这一点:

      (this.answer.getPoints())++
      

      (this.answer.getPoints()) 的第一部分创建了一个右值:实际上是一个几乎不存在时间的匿名变量。

      第二部分++ 增加匿名变量之后它被传递到setPoints()

      然后,匿名变量(现在递增)被丢弃。

      编译器/IDE 知道您正在做的事情永远不会被使用(增加一个临时值),并且正在标记它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-09
        • 1970-01-01
        • 2019-05-18
        • 2017-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-24
        相关资源
        最近更新 更多