【问题标题】:Why is Scanner class nextInt()++ a Syntax error? [duplicate]为什么 Scanner 类 nextInt()++ 是语法错误? [复制]
【发布时间】:2019-08-28 11:16:08
【问题描述】:

尝试编译

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        int x = in.nextInt()++;
    }
}

给出错误java: unexpected type; required: variable; found: value

使用+ 1 代替++ 可以解决此错误。

我知道“变量值加 1”和“值加 1”的区别。

但我从来没有遇到过这样的代码。谁能解释一下?

【问题讨论】:

  • re '但我从来没有遇到过这样的代码'。考虑int a = b++int a = b + 1。那里(至少)有两个显着差异。

标签: java io reference jvm java.util.scanner


【解决方案1】:

如果你这样做:

in.nextInt()++

相当于:

in.nextInt() = in.nextInt() + 1

但那是不可能的。不能将表达式的结果赋给方法调用,它必须是一个变量。

【讨论】:

    【解决方案2】:

    因为++ 运算符将int 增加1 并将新值分配给此变量,所以它不是返回任何内容的函数。你不能增加 in.nextInt() 因为它不是一个变量。您必须先声明一个变量才能重新分配它。

    【讨论】:

      【解决方案3】:

      当您使用+1 时,您会生成新值,您可以将其存储在某处或忽略,但是,当您使用++ 时,结果必须存储回原始变量,因此如果您将此运算符应用于某个值由没有变量来存储结果的方法返回。

      【讨论】:

        【解决方案4】:

        ++ 运算符仅适用于变量而不适用于常量,因此您编写它的方式与编写 1++ 之类的内容一样好,它会给您带来编译错误。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-20
          • 2018-06-03
          • 1970-01-01
          • 2015-07-21
          相关资源
          最近更新 更多