所以这是一个奇怪的,我知道代码本身是相当无用的,但我想知道为什么我得到错误:
我正在写一些代码,我写了这个:
if(scan.hasNextInt())
int row = scan.nextInt();
当时没有考虑变量范围,显然这没用,因为我无论如何都不能使用row
if
。我没有得到的是为什么我得到了错误:
> 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(scan.hasNextInt()) {
int row = scan.nextInt();
}
它会编译好。我的印象是,如果if
下有一行,那么花括号是可选的......显然还有其他考虑,或者两者都要编译或失败。
有人可以向我解释一下,或者指出一个文件,解释为什么我不能在没有大括号的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';
}
答案 0 :(得分:25)
如果您有if
,for
,while
,do/while
,则必须使用声明进行操作。声明不是声明。
IfThenStatement:
if ( Expression ) Statement
IfThenElseStatement:
if ( Expression ) StatementNoShortIf else Statement
IfThenElseStatementNoShortIf:
if ( Expression ) StatementNoShortIf else StatementNoShortIf
我认为他们这样做是因为您声明的任何变量都无法使用,因为它会立即超出范围(除了相同的声明)
答案 1 :(得分:1)
我的猜测是声明不是可执行语句,带有赋值的声明实际上被编译器分成两个不同的语句,第一个语句(声明)不可执行。 if需要可执行构造,块或可执行语句。
我知道我无法在Eclipse调试器中的非sassignment声明语句中放置断点。可能是同样的潜在原因。