这个Java程序做了一个简单的计算,并且假设输出123+1
的数值
(输出应为124.)(忽略最后一个“+”字符串。)
我在if语句中遇到错误:
线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:4
我为arrayz[i-1]
和arrayz[i+1]
进行了打印输出,似乎可以接受打印123和1,这是正确的。所以,我不确定是什么问题。
String math = "123+1+";
String arrayz[]={"123","+","1","+"};
double total =0.0;
int i=0;
while(i<=(math.length()-1)) //don't bother with the last char
{ i++;
if(arrayz[i].equals("+"))
{
total = Double.parseDouble((String)arrayz[i-1]) + Double.parseDouble((String)arrayz[i+1]);
}
}
System.out.println(total);
答案 0 :(得分:3)
while(i<=(math.length()-1))
数学长度为6,并且在侧循环中,数组长度为4
你可能想写
while(i<=(arrayz.length-1))
答案 1 :(得分:1)
由于您使用数组i
的索引arrayz
,因此您必须使用arrayz.length
代替math.length()
修改强>
这应该有效:
public static void main(String[] args)
{
String math = "123+1+";
String arrayz[] = { "123", "+", "1", "+" };
double total = 0.0;
int i = 0;
// arrayz.length - 2 -> because you are accessing "arrayz[i + 1]",
// arrayz.length - 1 would be OK if the maximum index you were using were "arrayz[i] "
while (i <= (arrayz.length - 2)) //don't bother with the last char
{
if (arrayz[i].equals("+")) {
total = Double.parseDouble((String) arrayz[i - 1]) + Double.parseDouble((String) arrayz[i + 1]);
}
i++; // Increment at the end of the loop
}
System.out.println(total);
}
答案 2 :(得分:1)
您循环遍历字符串math
,同时访问循环中arrayz
的元素,并认为它们具有相同的元素和相同的长度。
我建议你使用的是代替数学字符串(你可以在这种情况下省略它但我假设你通常不能用于某些标准),你可以使用String类型的数组,这样你的例子中的123就可以了是第一个元素arrayz[0]
。