8

私はいくつかのJavaコードについて説明しています:

これらのコードの違いは何ですか。一方はコンパイルできますが、もう一方はコンパイルできません。

「エラーを修正する方法」はすでに解決しているので興味はありませんが、問題の説明については詳しく説明します。

働く

public void  x(){
    HashMap<String , Integer> count= new HashMap<String, Integer>();
    Scanner scan= new Scanner("hdsh");

    String tmp;
    while((tmp=scan.next())!=null){
        if(count.containsKey(tmp)){
            count.put(tmp, 1);
        }
        else{
            count.put(tmp, count.get(tmp)+1);
        }
         tmp=scan.next();
    }

}

動作しない

public void  x(){
    HashMap<String , Integer> count= new HashMap<String, Integer>();
    Scanner scan= new Scanner("hdsh");

    while((String tmp=scan.next())!=null){
        if(count.containsKey(tmp)){
            count.put(tmp, 1);
        }
        else{
            count.put(tmp, count.get(tmp)+1);
        }
         tmp=scan.next();
    }

}

Eclipseのエラーは次のとおりです。

この行の複数のマーカー:

  • 文字列を変数に解決できません
  • トークン「tmp」の構文エラー、このトークンを削除します
  • 文字列を変数に解決できません
  • トークン「tmp」の構文エラー、このトークンを削除します
4

3 に答える 3

12

式の内部で変数を宣言することはできません。for(ループの最初の部分を除く)

于 2012-08-26T20:32:00.567 に答える
10

JLS§14.12

WhileStatement:
    while ( Expression ) Statement

JLS§15.27

Expression:
    AssignmentExpression

JLS§15.26

AssignmentExpression:
    ConditionalExpression
    Assignment

Assignment:
    LeftHandSide AssignmentOperator AssignmentExpression

LeftHandSide:
    ExpressionName
    FieldAccess
    ArrayAccess

LeftHandSide宣言にすることはできないため、許可されていません。

于 2012-08-26T20:44:55.833 に答える
0

あなたは構文のためにそして構文の間混合しています。条件内でtmp変数を宣言するため、2番目のブロックは機能しません。

while((String tmp=scan.next())!=null)

これを試して:

String tmp; while((tmp=scan.next())!=null)

于 2012-08-26T20:44:49.450 に答える