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())++);
答案 0 :(得分:8)
++
运算符仅在应用于声明的变量时才有意义。
此运算符会向integer
,long
等添加一个,并将结果保存到同一个变量中。
如果没有声明的变量,则无法保存结果,这就是编译器抱怨的原因。
在这种情况下允许使用++
运算符的一种方法是(不是最简洁的代码,但为了说明这一点):
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知道你正在做一些永远不会被使用的东西(递增一个临时值),并且正在标记它。