私は、優先順位に従って計算する単純な電卓を作成しようとしています。このメソッドには解決しなければならない文字列(式)が渡されます。私がやっているやり方は、最初に文字列を2つのベクトルに解析することです.1つは数値を保持し、もう1つはオペランドを保持します。文字列を正常に解析した後、答えを計算して返します。私は使用しているスキャナクラスから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;
}
文字列を解析する(または問題に近づく)方法はありますか?私は間違って何をしていますか?デバッガは、エラーに関する多くの情報を提供していません。