2012-12-19 14 views
14

を宣言ので、これは奇妙なものです、私は、コード自体はかなり役に立たないですけど、私はエラーを取得するなぜ私は思ったんだけど何:役に立たないローカル変数に

私はいくつかのコードを書いていた、私はこれを書いていました:

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

は、私はとにかくif過去rowを使用することはできませんので、明らかに、これは無意味です、一度変数のスコープについて考えていませんでした。

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

それは罰金コンパイルします:私はちょうどかどうかを確認するためにことを変更した場合今

> 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の下に1行があれば、中括弧はオプション...明らかに他の考慮事項もあるか、または両方ともコンパイルまたは失敗するでしょう。

誰かが私に説明したり、中括弧なしのifの条件でローカル変数を宣言できない理由を説明する文書を指摘できますか?


EDIT:ここでは、フル機能です:

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';  
} 
+7

それは 'もし'? –

+1

ここに完全なコードを書いてください。 –

+0

@NikolayKuznetsov - 編集を参照してください。 – Mike

答えて

25

ifforwhiledo/whileの場合は、その声明に従わなければなりません。宣言はステートメントではありません。前と後に来るもの、私はそれが(同じ宣言を除く)すぐにスコープ外になると宣言した変数を使用することができなかったので、彼らはこれを行うと仮定しJLS 14.9 - The if Statement

IfThenStatement: 
    if (Expression) Statement 

IfThenElseStatement: 
    if (Expression) StatementNoShortIf else Statement 

IfThenElseStatementNoShortIf: 
    if (Expression) StatementNoShortIf else StatementNoShortIf 

から

+0

あります。どうもありがとうございました! – Mike

+1

@PeterLawrey私は100%確信していませんが、[JLS 14.4](http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.4)のこの文は、より適切かもしれません - "すべてのローカル変数宣言文は、すぐにブロック_に含まれています。" (強調が追加されました) –

+0

'if'を' while'に変更すると同じエラーになりますので、実際にはそれが実際のルールです –

1

私の推測では、宣言は実行文ではなく、割り当てとの宣言が本当ににより二つの異なる文に分割されていることです最初のステートメント(宣言)は実行可能ではありません。 ifには、実行可能な構文(ブロックまたは実行可能な文)が必要です。

私はEclipseデバッガの非割り当て宣言文にブレークポイントを置くことができなかったことを知っています。おそらく同じ根本的な理由。

関連する問題