【发布时间】:2012-12-19 15:56:41
【问题描述】:
所以这是一个奇怪的问题,我知道代码本身相当无用,但我想知道为什么会出现错误:
我在写一些代码,我写了这个:
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(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之前和之后发生了什么? -
请在这里写下你的完整代码
-
@NikolayKuznetsov - 查看编辑。
标签: java if-statement scope declaration local-variables