数组索引超出界限帮助(Java)

时间:2013-12-28 06:04:55

标签: java arrays error-handling indexoutofboundsexception

这个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);

3 个答案:

答案 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]