需要一些帮助。我一直在使用数组进行一些基本的模式打印。我陷入了如何操纵索引以获得所需的模式,正如你在给定代码中看到的那样。我想知道我是否能够有一些初学者的建议......
/*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();}
}
}
}
答案 0 :(得分:2)
您应该将c
数组初始化为大小为x
的数组。
int c[] = new int[x];
嵌套循环中也存在问题。在x = 0
时,在嵌套循环的最后一步(y = x
)y-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--