java - 声明一个无用的局部变量

标签 java if-statement scope declaration local-variables

所以这很奇怪,我知道代码本身没什么用,但我想知道为什么会出现错误:

我在写一些代码,我写了这个:

if(scan.hasNextInt())
    int row = scan.nextInt();

当时没有考虑变量范围,显然这是无用的,因为无论如何我都不能在 if 之后使用 row。我不明白的是为什么我得到了我所做的错误:

> javac hw.java
hw.java:25: '.class' expected
    int row = scan.nextInt();
        ^
hw.java:25: not a statement
    int row = scan.nextInt();
    ^    
hw.java:25: illegal start of expression
    int row = scan.nextInt();
            ^
hw.java:25: ';' expected
    int row = scan.nextInt();
                  ^

现在,如果我只是将 if 检查修改为:

if(scan.hasNextInt()) {
    int row = scan.nextInt();
}

它会编译好的。我的印象是,如果 if 下有 1 行,大括号是可选的......显然还有其他考虑因素,或者两者都会编译或失败。

有人可以向我解释一下,或者给我指点一份文档来解释为什么我不能在没有大括号的情况下在 if 条件下声明局部变量吗?


编辑:这是完整的函数:

public static char getinput() {
    System.out.println("Where do you want to go? (row column)");
    Scanner scan = new Scanner(System.in);
    if(scan.hasNextInt())
        int row = scan.nextInt();
    String input = scan.next();
    System.out.println(input);
    return 'a';    
}

最佳答案

如果你有一个if, for, while, do/while 你必须跟在它后面陈述。声明不是声明。

来自 JLS 14.9 - The if Statement

IfThenStatement:
    if ( Expression ) Statement

IfThenElseStatement:
    if ( Expression ) StatementNoShortIf else Statement

IfThenElseStatementNoShortIf:
    if ( Expression ) StatementNoShortIf else StatementNoShortIf

我假设他们这样做是因为您声明的任何变量都无法使用,因为它会立即超出范围(相同的声明除外)

关于java - 声明一个无用的局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13956191/

相关文章:

bash - 如何检查 bash 中参数的长度?

javascript - 如何将 this 上下文传递给函数?

powershell -++ 变量上的运算符未按 ScriptBlock 中的预期更改

java - Facebook SDK : Android, Request 的类是什么

java - Android 文本在 Nexus 6 上无法适当缩放

c - 无法证明输出的合理性

javascript - JavaScript 闭包的一个包罗万象的定义

java - Qt C++ 如何通过android原生播放器播放视频

java - 在类中创建字符串,java

javascript - 为什么我的 JavaScript 代码没有按预期运行?