我意識到這可能是,可能是一個非常愚蠢的問題,但裸露在我身邊,我是一個新手。無論如何,我正在嘗試從JOptionPane中讀取像3 + 9-2 * 10/5這樣的數學表達式,並獲得結果 - 當然,要考慮到操作順序。我將字符串拆分爲數字和只是使用String.split()的操作數,並創建了一個for循環來尋找乘號或除號 - 在這種情況下,它會先檢測字符串「*」,因爲它首先出現在字符串中。Java IndexOutOfBoundsException錯誤
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
非常感謝。我忽略了String [index] .charAt(index)正在查看位置索引的事實,而不是在我指向的字符串數組的索引的第一個字符.charAt(0)處 - 在此情況下爲String [指數]。 而不是它: parsedIntegers [index-1] .charAt(index-1)它應該被parsedIntegers [index-1] .charAt(0)。這就是爲什麼它給了我超出界限例外的指數。 – rsant023