令牌上的语法错误

时间:2013-12-20 10:56:44

标签: java dictionary syntax hashmap syntax-error

我收到一个我不明白的错误:

此行有多个标记      - 令牌上的语法错误,放错位置      结构体)      - 令牌上的语法错误,删除这些令牌

以下是我的类代码,错误发生在第8行(标记为):

import java.util.*;

public class stringCalculator {
    String operator_array[] = {"+", "-", "/", "*", "(", ")"};
    Queue<Integer> outputQueue = new LinkedList<Integer>();
    Stack <Object> operatorStack = new Stack<Object>();
    Hashtable<String, Integer> precendece = new Hashtable<String, Integer>();
    precedence.put("+", 2); <=========== This is where the error occurs

    public void printTokenList(String [] expression, int length)
    {
        for(int i = 0; i < length; i++){
            System.out.println(expression[i]);
        }
    }

    public void checkInput(String [] expression, int length)
    {
        System.out.println(expression);
        for(int i = 0; i < length; i ++){
                if(checkIfNumber(expression[i])){
                int new_expression = Integer.parseInt(expression[i]);
                outputQueue.add(new_expression);
            }
            else if(expression[i].equals("+") || expression[i].equals("-") || expression[i].equals("/") || expression[i].equals("*")){
                for(int j = 0; j < 6; j++){
                    if(expression[i].equals(operator_array[j])){
                    operatorStack.push(expression[i]);
                    }
                }
            }
        }
    }

    public static boolean checkIfNumber(String expression)  
    {  
      try  
      {  
          double number = Double.parseDouble(expression);  
      }  
      catch(NumberFormatException nfe)  
      {  
        return false;
      }  
      return true;  
    }

    public void checkPrecedence()
    {

    }
}

4 个答案:

答案 0 :(得分:3)

语句precedence.put("+", 2);必须位于方法或块中。

例如,您可以将其放在构造函数

public stringCalculator() {
    precedence.put("+", 2);
}

与您遇到的问题无关,根据Java Naming Conventions

,课程需要以大写字母开头

答案 1 :(得分:0)

语句应放在内部构造函数/方法/块中,否则会发生编译时错误。

precedence.put("+", 2); <=========== This is where the error occurs

将该行移至构造函数/方法。

答案 2 :(得分:0)

precedence.put("+", 2); <=========== This is where the error occurs

此声明不在任何块内,因此不允许。

将其从此处移除并将其放入任何其他方法或块中

注意:这就是java的工作原理。

如需进一步讨论,请参阅:

Why can't I do assignment outside a method?

答案 3 :(得分:0)

precedence.put("+", 2);

以上行未正确放置。您应该在构造函数中初始化Hashtable。