我试图打印这个模式,就像我在我给出的代码中所显示的那样。但不知何故,我不知道我犯了什么样的错误,这个奇怪的输出已经带来了所需的输出。如果你们这些人可以帮助我真的很感激
/*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
答案 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();
}
}
}