Java 循环遍历For循环,ArrayIndexOutOfBounds
多次尝试更改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[
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];
。这将创建一个具有足够基大小的数组。