我收到一个我不明白的错误:
此行有多个标记 - 令牌上的语法错误,放错位置 结构体) - 令牌上的语法错误,删除这些令牌
以下是我的类代码,错误发生在第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()
{
}
}
答案 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的工作原理。
如需进一步讨论,请参阅:
答案 3 :(得分:0)
precedence.put("+", 2);
以上行未正确放置。您应该在构造函数中初始化Hashtable。