Java 循环遍历For循环,ArrayIndexOutOfBounds

Java 循环遍历For循环,ArrayIndexOutOfBounds,java,for-loop,indexoutofboundsexception,Java,For Loop,Indexoutofboundsexception,多次尝试更改for循环条件,但当我将零作为参数传递时,仍然获得ArrayIndexOutOfBounds。其他每一个数字都很好,我试图通过自动将其设置为零来解释零,这部分我做得不对吗?除了零之外,所有的编译和运行都很好 private static int iterativeCalculation(int userEntry) { int iterativeArray[] = new int[userEntry + 1]; iterativeArray[

多次尝试更改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));
}
private静态int迭代计算(int userEntry)
{
int iterativeArray[]=new int[userEntry+1];
迭代数组[0]=0;
迭代数组[1]=1;

对于(int i=2;i您正在设置
iterativeArray[1]=1;
,而不管数组中是否实际有2个或多个项目。这将超出一个元素的范围。

您正在设置
iterativeArray[1]=1;
无论数组中是否实际有2个或更多项。这将超出一个元素的界限。

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

但在这里:

    iterativeArray[1] = 1;
您正在尝试设置第二个元素的值。请记住,数组的
长度
比其实际大小小一个。因此,删除此行将修复它。或者改用
userEntry+2
,并相应地更改循环

编辑:


如果确实要修复第一个和第二个元素,请改用此选项:

int iterativeArray[] = new int[userEntry + 2];
iterativeArray[0] = 0;
iterativeArray[1] = 1;
这将创建一个具有足够基本大小的数组

请记住,
length
您在创建数组时在
[…]
中输入的长度必须比所需的实际长度多出一个,因为实际数组从0开始计数


在您的例子中,您将长度设置为1(最小值)。这将创建一个数组,该数组只能存储一个元素;即
iterativeArray[0]=//something
。当您将零作为参数传递时,
userEntry+1
=1,高于该值的任何内容都是
边界外的

但在这里:

    iterativeArray[1] = 1;
您正在尝试设置第二个元素的值。请记住,数组的
长度
比其实际大小小一个。因此,删除此行将修复它。或者改用
userEntry+2
,并相应地更改循环

编辑:


如果确实要修复第一个和第二个元素,请改用此选项:

int iterativeArray[] = new int[userEntry + 2];
iterativeArray[0] = 0;
iterativeArray[1] = 1;
这将创建一个具有足够基本大小的数组

请记住,
length
您在创建数组时在
[…]
中输入的长度必须比所需的实际长度多出一个,因为实际数组从0开始计数


在您的例子中,您将length设置为1(最小值)。这将创建一个只能存储一个元素的数组;即
迭代数组[0]=//something
。上面的任何内容都是
超出边界的

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

我认为您应该在调试中逐步检查代码ger以更好地理解问题所在。如果您单步执行代码,您将看到问题的确切位置。这是一项基本的技术和工具。

感谢您的回答。您能详细说明一下吗?因为等式,数组中的第一个条目始终为零,第二个条目始终为一n、 所以我要考虑这些。我应该如何更改代码?输入为零时,创建一个大小为1的数组,该数组只有一个元素:
iterativeArray[0]
。因此,您无法访问
iterativeArray[1]
无论函数大小如何,都可以在函数中执行此操作。感谢您的回复。请您详细说明一下好吗?由于等式的关系,数组中的第一个条目始终为零,第二个条目始终为一,因此我将对其进行说明。我应该如何更改该代码?输入为零,您将创建一个si数组ze 1只有一个元素:
iterativeArray[0]
。因此您无法访问
iterativeArray[1]
在函数中执行此操作,而不考虑大小。您应该在
userEntry
上设置一些边界条件。您应该在
userEntry
上设置一些边界条件,但它无法解决此问题。由于等式的原因,我必须将用户条目0或1作为基本情况进行说明。删除该行仍然会给我一个边界外的感觉启用。第一个元素始终为0,第二个元素始终为1。如果确实要修复第一个和第二个元素(或
zeroth
first
),请使用
int iterativeArray[]=new int[userEntry+2];
取而代之。这将创建一个具有足够基本大小的数组。但它无法解决此问题。我必须考虑将用户输入的0或1作为基本情况,因为这个等式。删除该行仍然会给我一个边界外的感觉。想法是第一个元素始终为0,第二个元素始终为1。如果确实要修复第一个和第二个元素第二个元素(或者实际上是
zeroth
first
),然后使用
int iterativeArray[]=new int[userEntry+2];
。这将创建一个具有足够基大小的数组。