在玩循环时创建以下代码。下面的代码将Fibonacci值存储到一个数组中,然后使用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] + ", ");
}
答案 0 :(得分:5)
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 + ", ");
您应该阅读有关增强型for循环的this和this。
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
保持数字数组中的当前值,不当前索引。这就是你得到IOOBE
的原因。
答案 1 :(得分:5)
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 :(得分:2)
for(int i : numbers)
{
System.out.print(numbers[i] + ", ");
}
应该是
for(int i : numbers)
{
System.out.print(i + ", ");
}
您不需要在增强型for循环中使用索引。