class Yang
{
public static void main(String args[])
{
int i,j;
int Level=10;
int Yang[][]=new int[Level][];
System.out.println("うぷ杨辉△");
for(i=0;i<Yang.length;i++)
Yang[i]=new int[i+1];
Yang[0][0]=1;
for(i=0;i<=Yang.length;i++)
{
Yang[i][0]=1;
for(j=i;j<=Yang[i].length-1;j++)
Yang[i][j]=Yang[i-1][j-1]+Yang[i-1][j];
Yang[i][Yang[i].length-1]=1;
}
for(i=0;i<Yang.length;i++)
{
for(j=0;j<Yang.length;j++)
System.out.println(Yang[i][j]+" ");
System.out.println();
}
}
}
编译没问题,但运行时数组溢出,如何解决
{
public static void main(String args[])
{
int i,j;
int Level=10;
int Yang[][]=new int[Level][];
System.out.println("うぷ杨辉△");
for(i=0;i<Yang.length;i++)
Yang[i]=new int[i+1];
Yang[0][0]=1;
for(i=0;i<=Yang.length;i++)
{
Yang[i][0]=1;
for(j=i;j<=Yang[i].length-1;j++)
Yang[i][j]=Yang[i-1][j-1]+Yang[i-1][j];
Yang[i][Yang[i].length-1]=1;
}
for(i=0;i<Yang.length;i++)
{
for(j=0;j<Yang.length;j++)
System.out.println(Yang[i][j]+" ");
System.out.println();
}
}
}
编译没问题,但运行时数组溢出,如何解决
{
Yang[i][0]=1;
for(j=i;j<=Yang[i].length-1;j++)
Yang[i][j]=Yang[i-1][j-1]+Yang[i-1][j];
这个地方有问题,上面i初始化为0了,下面i-1不就变成-1了吗,所以数组越界
推荐使用这种方法
public class YangHui {
public static void main(String args[]) {
final int ROW = 10;//指定输出多少行
int a[][] = new int[ROW + 1][];
for (int i = 0; i <= ROW; i++) {
a[i] = new int[i + 1]; // 指定每行的列数 }
yanghui(a, ROW);
} static void yanghui(int a[][], int ROW) { for (int i = 0; i <= ROW; i++)
for (int j = 0; j <= a[i].length - 1; j++) {
if (i == 0 || j == 0 || j == a[i].length - 1)
a[i][j] = 1;
else
a[i][j] = a[i - 1][j - 1] + a[i - 1][j]; }
for (int i = 0; i <= ROW; i++) {
for (int j = 0; j <= a[i].length - 1; j++)
System.out.print(a[i][j] + "\t");
System.out.println();
} }
}
class Yang
{
public static void main(String args[])
{
int i,j;
int Level=10;
int Yang[][]=new int[Level][];
System.out.println("うぷ杨辉△");
for(i=0;i<Yang.length;i++)
Yang[i]=new int[i+1];
Yang[0][0]=1;
System.out.println("ok1");
for(i=0;i<Yang.length;i++)
{
Yang[i][0] =1;
Yang[i][i] =1;
}
for(i=2;i<Yang.length;i++)
{
Yang[i][0]=1;
for(j=1;j<Yang[i].length-1;j++)
Yang[i][j]=Yang[i-1][j-1]+Yang[i-1][j];
Yang[i][Yang[i].length-1]=1;
}
System.out.println("ok");
for(i=0;i<Yang.length;i++)
{
for(j=0;j<Yang[i].length;j++)
System.out.println(Yang[i][j]+" ");
System.out.println();
}
}
}
{
public static void main(String args[])
{
int i,j;
int Level=10;
int Yang[][]=new int[Level][];
System.out.println("うぷ杨辉△");
for(i=0;i<Yang.length;i++)
Yang[i]=new int[i+1];
for(i=0;i<Yang.length;i++)
{
Yang[i][0] =1;
Yang[i][i] =1;
}
for(i=2;i<Yang.length;i++)
{
for(j=1;j<Yang[i].length-1;j++)
Yang[i][j]=Yang[i-1][j-1]+Yang[i-1][j];
}
for(i=0;i<Yang.length;i++)
{
for(j=0;j<Yang[i].length;j++)
System.out.println(Yang[i][j]+" ");
System.out.println();
}
}
}
Yang[i][j]=Yang[i-1][j-1]+Yang[i-1][j];外,还有一种"规则"更统一的方法,就是行和列恰好是
cmn(就是m个数中取n个数,有多少种取法),
/**
@version 1.20 2004-02-10
@author Cay Horstmann
*/public class LotteryArray
{
public static void main(String[] args)
{
final int NMAX = 10; // allocate triangular array
int[][] odds = new int[NMAX + 1][];
for (int n = 0; n <= NMAX; n++)
odds[n] = new int[n + 1]; // fill triangular array
for (int n = 0; n < odds.length; n++)
for (int k = 0; k < odds[n].length; k++)
{
/*
compute binomial coefficient
n * (n - 1) * (n - 2) * . . . * (n - k + 1)
-------------------------------------------
1 * 2 * 3 * . . . * k
*/
int lotteryOdds = 1;
for (int i = 1; i <= k; i++)
lotteryOdds = lotteryOdds * (n - i + 1) / i; odds[n][k] = lotteryOdds;
} // print triangular array
for (int[] row : odds)
{
for (int odd : row)
System.out.printf("%4d", odd);
System.out.println();
}
}
}