Я пытаюсь создать простой калькулятор, который вычисляет в соответствии с приоритетом. Метод передается строка (выражение), которая должна быть решена. То, как я это делаю, - это сначала разбор строки на два вектора, один из которых содержит числа, а другой - операнды. После того, как я успешно проанализировал строку, я затем вычислил и вернул ответ. Я получаю java.util.InputMismatchException из класса сканера, который я использую. Вот мой код:Простой калькулятор с использованием Java-сканера и векторных классов
public static int performCalc(String problem)
{
// 3 * 2 + 4/1 + 2 + 4
Pattern op = Pattern.compile("[*/+-]");
String prob;
Vector<Integer> nums = new Vector();
Vector<String> operands = new Vector();
int answer = 0, index = 0, numOne, numTwo;
Scanner scNums = new Scanner(problem);
Scanner scOperands = new Scanner(problem);
while(scNums.hasNext())
{
nums.add(scNums.nextInt());
}
while(scNums.hasNext())
{
operands.add(scNums.next(op));
}
for(int i = 0; i<operands.size(); i++)
{
if(operands.get(i) == "*" || operands.get(i) == "/")
{
nums.set(i, calc(nums.get(i), operands.get(i), nums.get(i+1)));
nums.remove(i+1);
}
}
for(int i = 0; i<operands.size(); i++)
{
if(operands.get(i) == "+" || operands.get(i) == "-")
{
nums.set(i, calc(nums.get(i), operands.get(i), nums.get(i+1)));
nums.remove(i+1);
}
}
return nums.firstElement();
}
public static int calc(int numOne, String operand, int numTwo)
{
if(operand == "*")
return numOne*numTwo;
if(operand == "/")
return numOne/numTwo;
if(operand == "+")
return numOne+numTwo;
if(operand == "-")
return numOne-numTwo;
return 0;
}
Есть ли лучше и более элегантный способ разбора строки (или подойти к проблеме)? Что я делаю не так? Отладчик не дает много информации об ошибке.