java 预期变量

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/36165743/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-03 01:01:11  来源:igfitidea点击:

Variable expected

javavariablesincrement

提问by Andrew Tobilko

private void calculateForEachQuestion() {
    ...
    if (questions.size() >= answers.size()) {
        answers.forEach(answer -> {
            if (questions.contains(answer))
                this.answer.setPoints((this.answer.getPoints())++);
                // Variable expected  ^                    
    });
}

The error I encountered is:

我遇到的错误是:

unexpected type
required: variable
found: value


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

What is wrong with the statement?

声明有什么问题?

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

回答by qwwqwwq

The ++operator only makes sense when applied to a declared variable.

++当应用于声明的变量操作才有意义。

This operator will add one to an integer, long, etc. and save the result to the same variable in-place.

此运算符会将 1 添加到 an integerlong等,并将结果就地保存到相同的变量中。

If there is no declared variable, there is nowhere to save the result, which is why the compiler complains.

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

One way to allow use of the ++operator in this situation would be (not the most concise code, but to illustrate the point):

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

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

回答by user3437460

this.answer.getPoints()will return a value, and you can't use increment ++or decrement --on that. You can only use it on variables.

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

If you want to add 1 to it, you can do it as:

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

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


I know that, but why?

我知道,但为什么呢?

You can do this:

你可以这样做:

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

but not this:

但不是这个:

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

回答by Atri

Change this:

改变这个:

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

to:

到:

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

++will increment a variable with 1, but since this.answer.getPoints()will return a value and its not a defined variable, it won't be able to store the incremented value.

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

Think of it like doing: this.answer.getPoints() = this.answer.getPoints() + 1, where would the incremented value be stored?

把它想象成: this.answer.getPoints() = this.answer.getPoints() + 1,增加的值将存储在哪里?

回答by Paul Hicks

The error is just in this bit:

错误就在这一点上:

(this.answer.getPoints())++

The first part of this (this.answer.getPoints())creates an rvalue: effectively, an anonymous variable that lasts almost no time.

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

The second part ++increments that anonymous variable afterit is passed into setPoints().

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

Then, the anonymous variable (now incremented) is thrown away.

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

The compiler/IDE knows that you're doing something that will never be used (incrementing a temporary value), and is flagging it.

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