嵌套循环中的ArrayIndexOutOfBoundsException

时间:2013-12-07 16:16:50

标签: java arrays indexing

需要一些帮助。我一直在使用数组进行一些基本的模式打印。我陷入了如何操纵索引以获得所需的模式,正如你在给定代码中看到的那样。我想知道我是否能够有一些初学者的建议......

/*2 6 12 20 30 42
 * 4 6 8 10 12
 * 2 2 2 2
 * 0 0 0
 * 0 0
 * 0
 * 
 */

以下是代码:

public class pat {
    public static void main(String args[]){

        int a[] = {2, 6, 12, 20, 30, 42};

        for(int x = 0; x <= 5; x++) {
            int c[]={};
            for(int y = 5; y >= x; y--) {
                c[y]=a[y]-a[y-1];
                System.out.print(c[y]);
            }
            System.out.println();}
        }
    }
}

2 个答案:

答案 0 :(得分:2)

  • 您应该将c数组初始化为大小为x的数组。

    int c[] = new int[x];

  • 嵌套循环中也存在问题。在x = 0时,在嵌套循环的最后一步(y = xy-1被评估为-1时,这就是您收到ArrayIndexOutOfBoundException <的原因/ p>

  • 如果我是你,我会定义一个previous数组,它将作为最后一个已评估数字数组的副本。

可能的解决方案:

int a[] = { 2, 6, 12, 20, 30, 42 };

int[] previous = a;
for (int x = a.length - 1; x > 0; x--) {
    int c[] = new int[x];
    for (int y = 0; y < x; y++) {
        c[y] = previous[y + 1] - previous[y];
        System.out.print(c[y] + " ");
    }
    previous = c;
    System.out.println();
}

答案 1 :(得分:1)

你的c []数组初始化是错误的:

int c[]={};

这将创建一个大小为0的数组;

我相信你想要做的是:

int c[] = new int[6];

同样在for(int y=5;y>=x;y--)的最后一次迭代中,您将在a[y-1]中获得-1,因此我将条件更改为int y=5;y>x;y--