gpt4 book ai didi

Java IndexOutOfBoundsException 读取数学表达式时出错

转载 作者:行者123 更新时间:2023-12-04 05:14:06 27 4
gpt4 key购买 nike

我试图从 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

最佳答案

数组中的每个元素 parsedIntegers是一个单字符的字符串,所以当你使用 charAt 时,它应该只是 charAt(0) :

int multResult = Character.getNumericValue(parsedIntegers[index - 1].charAt(0)) *
Character.getNumericValue(parsedIntegers[index].charAt(0));

使用 charAt(index)charAt(index - 1)有尝试读取超过单字符字符串的末尾并抛出 StringIndexOutOfBoundsException你得到了。

但是,更可靠的方法可能是使用 Integer.parseInt所以你可以有多位整数:
int multResult = Integer.parseInt(parsedIntegers[index - 1]) *
Integer.parseInt(parsedIntegers[index]);

关于Java IndexOutOfBoundsException 读取数学表达式时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14510530/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com