增强的For循环异常

Rud*_*haw 6 java arrays for-loop

在玩循环时创建以下代码.下面的代码将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] + ", ");
    }
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常.我第一次把它扔在一起,我使用增强的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)
Run Code Online (Sandbox Code Playgroud)

我不知道出了什么问题.更改第二个循环不应更改值(您会注意到斐波纳契值是错误的(即缺少值)).而且我不明白为什么简单的增强型for循环会跳过索引.现在,这不是一个大问题,因为这不是一个项目或任何东西,它只是让我感到困惑,我无法弄清楚它为什么这样做.有线索吗?

增强的for循环就像这样;

for(int i : numbers)
    {
        System.out.print(numbers[i] + ", ");
    }
Run Code Online (Sandbox Code Playgroud)

Ale*_* C. 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;
Run Code Online (Sandbox Code Playgroud)

在这里,您可以通过调用tab[2]或访问最后一个元素tab[tab.length-1],这是等效的.


道歉,这只是我在问题中提出的代码中的一个错误.

问题是,你应该做的:System.out.print(i + ", "); 你应该阅读有关增强的for循环.

for语句还有另一种用于迭代集合和数组的表单.这种表单有时被称为增强for语句,可用于使循环更紧凑和易于阅读.要演示,请考虑以下数组,其中包含数字1到10:

int[] numbers = {1,2,3,4,5,6,7,8,9,10};
Run Code Online (Sandbox Code Playgroud)

以下程序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);
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,变量项保存数字数组中当前值.

因此item保持数字数组中的当前值而不是当前索引.这就是为什么你得到一个IOOBE.

  • 关于0基于索引的快速解释将使这个答案很好! (3认同)

Mar*_*oun 5

for(int i : numbers)
{
     System.out.print(numbers[i] + ", ");
}
Run Code Online (Sandbox Code Playgroud)

i这是数组中的元素,而不是索引.它可能比大numbers.length.

例如,如果numbers = {1,2,3,9}i1,2,3,9.但它的长度是4,所以当你循环其中的元素时,你试图做的numbers[9]超出它的大小.

你可能想要 System.out.print(i + ", ");