我的杨辉三角型为什么是这样的呢,为什么中间得0呢,想不通,求大神告知!
public static void main(String[] args)
{
Scanner reader=new Scanner(System.in);
System.out.println("请输入整数n:");
int n=reader.nextInt();
int[][] a=new int[n][n];
for(int i=0;i<n;i++)
{
for(int j=0;j<i+1; j++)
{
if(i==j||j==0)
{
a[i][j]=1;
}
else
a[i][j]=a[i-1][j-1]+a[i-1][j];
System.out.printf(" %d",a[i][j]);
}
System.out.println();
}
reader.close();
}
看不太清,int数组值如果没有值,默认是0.
你这像素,完全看不清,贴代码吧
import java.util.Scanner;
public class Yh
{
public static void main(String[] args)
{
Scanner reader=new Scanner(System.in);
System.out.println("请输入整数n:");
int n=reader.nextInt();
//int[][] a=new int[n][];
for(int i=0;i<n;i++)
{
int[][] a=new int[n][i+1];
for(int j=0;j<a[i].length;j++)
{
if(i==j||j==0)
{
a[i][j]=1;
}
else
a[i][j]=a[i-1][j-1]+a[i-1][j];
System.out.printf(" %d",a[i][j]);
}
System.out.println();
}
reader.close();
}
}
1
1 1
1 0 1
1 0 0 1
1 0 0 0 1
1 0 0 0 0 1
你的每次行循环之后都会重置二位数组a,这样写是不对的
很明显,你没把情况分清楚,if(i==j||j==0)只是把对角线和第一列的数置1,很笼统,现把它分为2个if
改为如下
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
if(j==0)
a[i][j]=1;
if(i==j)
{
a[i][j]=1;
break;
}
if(i!=j&&j!=0)
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
这样的话,各个条件分支很明显,也便于理解
new的a把以前的值覆盖掉了吧,
int[][] a = new int[n][n];//根据输入,首先确定二维数组是几乘几的。
for (int i = 0; i < n; i++) {
for (int j = 0; j < i+1; j++) {
if (i==0||j == 0) { //每行的第一个为1
a[i][j] = 1;
} else {
if (i < j + 1) {
a[i][j] = 1; //每行的最后一个为1
} else {
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];//每行中间值等于上一行同列的值和上一行前列的值和
}
}
System.out.print(a[i][j]);
}
System.out.println();
}