JOptionPane から 3+9-2*10/5 のような数式を読み取って、その結果を取得しようとしています。もちろん、操作の順序を考慮しています。String.split() を使用して文字列を数字のみとオペランドのみに分割し、乗算記号または除算記号のいずれかを探す for ループを作成しました。文字列で。
public static void main(String[] args)
{
String mathString = JOptionPane.showInputDialog("Please type a simple math expression (i.e., without parentheses).");
String[] parsedIntegers = mathString.split("\\D");
String[] parsedOperands = mathString.split("\\d+");
parsedOperands[0] = null;
System.out.println(Arrays.toString(parsedIntegers));
System.out.println(Arrays.toString(parsedOperands));
for (int index = 1; index <= parsedOperands.length; index = index + 1)
{
if (parsedOperands[index].equals("*"))
{
System.out.println("The multiplication sign is at index " + index + ".");
int multResult = Character.getNumericValue(parsedIntegers[index - 1].charAt(index - 1)) * Character.getNumericValue(parsedIntegers[index].charAt(index));
System.out.println(multResult);
}
}
}
文字列配列 parsedOperands は次のようになります: [null, +, -, *, /]. 文字列配列 parsedIntegers は次のようになります: [3, 9, 2, 10, 5].
ただし、parsedOperands のインデックス 3 にある "*" を探し、parsedIntegers の (index - 1) と (index) にあるものを乗算しようとすると、Java は IndexOutOfBoundsException を返します。なぜこれが起こるのですか?何か不足していますか?
エラーは次のとおりです。
[3, 9, 2, 10, 5]
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 2
[null, +, -, *, /]
The multiplication sign is at index 3.
at java.lang.String.charAt(String.java:658)
at programmingpractice.SolveMathExpression.main(SolveMathExpression.java:49)
Java Result: 1