所以这很奇怪,我知道代码本身没什么用,但我想知道为什么会出现错误:
我在写一些代码,我写了这个:
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/