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

您正在混合 for 和 while 语法。第二个块不起作用,因为您在条件内声明 tmp 变量。

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

尝试这个:

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

于 2012-08-26T20:44:49.450 回答