小妹初来乍到,求人解决一下杨辉三角问题

我的杨辉三角型为什么是这样的呢,为什么中间得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();
    }