变量预期

时间:2016-03-22 21:39:01

标签: java variables increment

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())++);

4 个答案:

答案 0 :(得分:8)

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

此运算符会向integerlong等添加一个,并将结果保存到同一个变量中。

如果没有声明的变量,则无法保存结果,这就是编译器抱怨的原因。

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

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

答案 1 :(得分:5)

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

答案 2 :(得分: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,将增加的值存储在哪里?

答案 3 :(得分:1)

错误就在这一点:

(this.answer.getPoints())++

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

第二部分++将传递给setPoints()之后的匿名变量递增。

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

编译器/ IDE知道你正在做一些永远不会被使用的东西(递增一个临时值),并且正在标记它。