增强的 For 循环异常 [重复]
Posted
技术标签:
【中文标题】增强的 For 循环异常 [重复]【英文标题】:Enhanced For Loop Exception [duplicate] 【发布时间】:2013-05-13 11:30:15 【问题描述】:在玩循环时创建了以下代码。下面的代码将斐波那契值存储到一个数组中,然后使用 for 循环打印它们。
int [] numbers;
numbers = new int[25];
numbers[0] = 1;
numbers[1] = 1;
System.out.println("Initializing the array values");
for(int i = 2; i < numbers.length; i++)
numbers[i] = numbers[i-1] + numbers[i-2];
System.out.println("Printing out Fibonacci values");
for(int i = 0; i < numbers.length; i++)
System.out.print(numbers[i] + ", ");
上面的代码工作正常。不过,我第一次将它放在一起时,我使用了增强的 for 循环来打印出值(代码中的第二个 for 循环)。这编译得很好,但是当我运行它时,我得到以下信息;
Initializing the array values
Printing out Fibonacci values
1, 1, 2, 3, 8, 34, 377, 17711, Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 34
at ArrayDemo.main(ArrayDemo.java:21)
我不明白出了什么问题。更改第二个循环不应更改值(您会注意到斐波那契值是错误的(即缺失值))。而且我不明白为什么简单的增强 for 循环会跳过索引。现在,这并不是什么大问题,因为这不是针对项目或任何东西的,它只是让我感到困扰,我无法弄清楚它为什么会这样做。有什么线索吗?
增强的 for 循环看起来像这样;
for(int i : numbers)
System.out.print(numbers[i] + ", ");
【问题讨论】:
【参考方案1】:for(int i : numbers)
System.out.print(numbers[i] + ", ");
i
这里是数组中的元素,而不是索引。它可能大于numbers.length
。
例如,如果numbers = 1,2,3,9
则i
将是1
、2
、3
、9
。但是它的长度是 4,所以当你循环它里面的元素时,你试图做的 numbers[9]
超出了它的大小。
你可能想System.out.print(i + ", ");
【讨论】:
谢谢。简洁易懂。【参考方案2】:for(int i = 0; i <= numbers.length; i++)
应该是
for(int i = 0; i < numbers.length; i++)
在 java 中,数组是基于 0 的索引。这意味着您的第一个元素应在索引 0 处访问,显然最后一个元素应在数组长度减 1 处访问。
int tab[] = new int[3]; //tab of length 3
tab[0] = 11;
tab[1] = 24;
tab[2] = 5;
在这里,您可以通过调用tab[2]
或tab[tab.length-1]
来访问最后一个元素,这是等效的。
抱歉,这只是我在 问题。
问题是你应该这样做:System.out.print(i + ", ");
您应该阅读 this 和 this 了解增强的 for 循环。
for 语句还有另一种形式,用于迭代 集合和数组 这种形式有时被称为 增强的 for 语句,可用于使您的循环更多 紧凑且易于阅读。为了演示,请考虑以下内容 数组,其中包含数字 1 到 10:
int[] numbers = 1,2,3,4,5,6,7,8,9,10;
以下程序 EnhancedForDemo
使用增强的 for 循环遍历数组:
class EnhancedForDemo
public static void main(String[] args)
int[] numbers =
1,2,3,4,5,6,7,8,9,10;
for (int item : numbers)
System.out.println("Count is: " + item);
在此示例中,变量 item 保存 数字数组中的当前值。
所以item
保存数字数组中的当前值,而不是当前索引。这就是您收到IOOBE
的原因。
【讨论】:
快速解释基于 0 的索引将是一个很好的答案! 抱歉,这只是我在问题中提出的代码中的一个错误。这是第一次做对了。它仍然没有解释为什么增强的 for 循环不起作用。我已经编辑了问题代码以反映这一点。【参考方案3】:for(int i : numbers)
System.out.print(numbers[i] + ", ");
应该是
for(int i : numbers)
System.out.print(i + ", ");
您不需要在增强的 for 循环中使用索引。
【讨论】:
以上是关于增强的 For 循环异常 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
增强的 for 循环不适用于将值分配给数组(Java)[重复]