迭代For循环,ArrayIndexOutOfBounds

时间:2015-11-30 01:44:53

标签: java for-loop indexoutofboundsexception

尝试多次更改for循环条件,当我将零作为参数传递时仍然得到ArrayIndexOutOfBounds。每个其他数字工作正常,我试图通过设置它自动等于零来解释零,我做错了吗?除零之外,所有内容都编译并运行良好。

private static int iterativeCalculation(int userEntry)
    {

        int iterativeArray[] = new int[userEntry + 1];
        iterativeArray[0] = 0;
        iterativeArray[1] = 1;

        for (int i = 2; i <= userEntry; i++)
        {
          iterativeArray[i] = (3 * iterativeArray[i - 1]) - (2 * iterativeArray[i - 2]);
          iterativeEfficiencyCounter++;  
        } 
          return iterativeArray[userEntry];

    }

public static void main(String[] args) {

        System.out.println(iterativeCalculation(0));
}

尝试通过代码调试我的方式,仍然不了解出了什么问题。非常感谢任何帮助!谢谢!

3 个答案:

答案 0 :(得分:3)

当您将零作为参数传递时,userEntry + 1 = 1。

但是在这里:

    iterativeArray[1] = 1;

您正在尝试设置第二个元素的值。请记住,length数组比实际大小少一个。所以删除这一行将解决它。或者使用userEntry + 2代替并相应地改变你的循环。

修改

如果你真的想修复第一个和第二个元素,那么请改用它:

int iterativeArray[] = new int[userEntry + 2];
iterativeArray[0] = 0;
iterativeArray[1] = 1;

这将创建一个足够大小的数组。

请记住,length您输入[...]时创建数组必须比您想要的实际长度多一个。因为实际数组从0开始计数。

在您的情况下,您将长度设置为1(最小)。这将创建一个只能存储一个元素的数组;那是iterativeArray[0] = //something。高于OutOfBounds的任何内容。

答案 1 :(得分:0)

无论数组中是否有2个或更多项目,您都在设置iterativeArray[1] = 1;。这将与一个元素不符。

答案 2 :(得分:0)

我认为您应该在调试器中单步执行代码以最好地了解问题所在。如果单步执行代码,您将确切地看到它出现问题的确切位置。这是一项基本技术和工具。