模式错误纠正

时间:2013-12-08 10:36:03

标签: java arrays function

我试图打印这个模式,就像我在我给出的代码中所显示的那样。但不知何故,我不知道我犯了什么样的错误,这个奇怪的输出已经带来了所需的输出。如果你们这些人可以帮助我真的很感激

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


public class patt {
    static int ar[]={2,6,12,20,30,42};
    public static void pattern(){
        int y=0,x=0;
        while( x<ar.length){
            int c[]=new int[6];

                    if(x+1>=ar.length){
                break;
            }
            else{
            c[x]=ar[x+1]-ar[x];
            System.out.print(c[x]+" ");
            ar[x]=c[x];
        }
            x++;
            }
            System.out.println();



    }


    public static void main(String args[]){
    patt ob=new patt();
    System.out.println("2 6 12 20 30 42");
for(int a=0;a<6;a++){
    ob.pattern();
}
}
}

The output is as follows,
2 6 12 20 30 42
4 6 8 10 12 
2 2 2 2 30 
0 0 0 28 12 
0 0 28 -16 30 
0 28 -44 46 12 
28 -72 90 -34 30 

1 个答案:

答案 0 :(得分:1)

您正在运行该函数6次(作为数组的长度)。 问题是你保留静态数组中的更改,但是然后运行以下条件:

 if(x+1>=ar.length){
    break;
 }

上面的第一次运行没问题。但是在第一次运行之后,应该剩下5个元素(在元素之间产生差异之后)。但是,您将始终作为数组的整个长度运行。这就解释了为什么每行总是印有5个元素。 你的解决方案是定义另一个静态数组,它是长度,然后在每次运行后减少该长度。 我添加了一个静态长度变量,替换了上面列出的条件来查看它而不是总是查看数组长度,并在每次运行时减少变量。

public class patt {
    static int ar[]={2,6,12,20,30,42};
    static int length=ar.length;
    public static void pattern(){
        int y=0,x=0;
        while( x<ar.length){
            int c[]=new int[6];

                    if(x+1>=length){
                break;
            }
            else{
            c[x]=ar[x+1]-ar[x];
            System.out.print(c[x]+" ");
            ar[x]=c[x];
        }
            x++;
            }
            System.out.println();
        length--;


    }


    public static void main(String args[]){
    patt ob=new patt();
    System.out.println("2 6 12 20 30 42");
for(int a=0;a<6;a++){
    ob.pattern();
}
}
}