当前位置: 代码迷 >> Java相关 >> [求助]杨辉三角程序,怎么运行不了?
  详细解决方案

[求助]杨辉三角程序,怎么运行不了?

热度:95   发布时间:2006-03-29 22:32:00.0
[求助]杨辉三角程序,怎么运行不了?
杨辉三角程序,编译通过了,但运行不了.

public class yanghui
{
public static void main(String args[])
{
int[][] nyanghui=new int[10][];
for(int i=0;i<nyanghui.length;i++)
{
for(int j=0;j<i;j++)
{
if(j==0 || j==i)
nyanghui[i][j]=1;
else
nyanghui[i][j]=nyanghui[i-1][j-1]+nyanghui[i-1][j];
}
}
for(int i=0;i<nyanghui.length;i++)
{
for(int j=0;j<nyanghui[i].length;j++)
{
System.out.println(nyanghui[i][j]);
}
}
}
}
谢了.
搜索更多相关的解决方案: 杨辉三角  运行  

----------------解决方案--------------------------------------------------------
我来说几句.

public class yanghui
{
public static void main(String args[])
{
int[][] nyanghui=new int[10][];
for(int i=0;i<nyanghui.length;i++)
{
for(int j=0;j<i;j++)
{
if(j==0 || j==i)
nyanghui[i][j]=1;
else
nyanghui[i][j]=nyanghui[i-1][j-1]+nyanghui[i-1[j]; /*按此公式,我们知当i=0,j=1不属于if的判定条件,故按else语句执行,这样就是nyanghui[0][1]=nyanghui[-1][0]+nyanghui[-1][1],显然出现了数组下标溢出问题,即nyanghui[0][1]无法求解出,所以无法运行此程序*/
}
}
for(int i=0;i<nyanghui.length;i++)
{
for(int j=0;j<nyanghui[i].length;j++)
{
System.out.println(nyanghui[i][j]);
}
}
}
}

这里我想问一下,杨辉三角到底目的是要我们输出什么样的图形.
----------------解决方案--------------------------------------------------------
1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
...
如此
----------------解决方案--------------------------------------------------------
按你的意思是a[1][1]等于2了,而一楼的程序好象要将a[1][1]生成1,也不知道你们谁的对,哪个大哥再进来肯定一下
----------------解决方案--------------------------------------------------------

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

1 6 15 20 15 6 1
................................

这样?


----------------解决方案--------------------------------------------------------

不好意思,我前面搞错了,没有看清楚程序

一楼的程序不存在我说的情况(因为i<j);

上面的程序之所以不能运行,却能通过编译,

是由于:

程序虽然为整个二维数组分配了空间,

却没有为二维数组里的每一个一维数组分配空间

因为此处每一个一维数组的长度是不一样的

所以我们必须动态的为每一个一维数组分配空间

下面将程序改写为


public class Yanghui
{
public static void main(String args[])
{
int nyanghui[][]=new int[10][];
for(int i=0;i<nyanghui.length;i++)
{ nyanghui[i]=new int[i+1]; //动态为每一个一维数组分配空间
for(int j=0;j<=i;j++)
{
if(j==0||j==i)
nyanghui[i][j]=1;
else
nyanghui[i][j]=nyanghui[i-1][j-1]+nyanghui[i-1][j];
System.out.print(" "+nyanghui[i][j]); //此出不换行
}
System.out.println(); //内循环技术,执行换行
}}}

上面我将程序的后半部分循环给删除了,因为那只会增加系统地开销,当然也可以那样写,
不过输出语句一定要改,我们要在适当的时候换行,而不是每输出一个数组原素就换行.

输出地效果还是不好,如果能像C语言那样格式化输出(比方说我们让每一个数组元素地长度为6,不足前导空格)就好多了


----------------解决方案--------------------------------------------------------
上面打错字了
System.out.println(); //内循环技术,执行换行
我要说的是"内部循环结束"



----------------解决方案--------------------------------------------------------
谢谢daydayf!!!
----------------解决方案--------------------------------------------------------

// 据说jdk1.5增加了自动装包/拆包(Autoboxing/unboxing)功能,或许可以这样写。

int n=10;
ArrayList c = new ArrayList();
for(int i=0;i<n;i++)
{
c.add(0,1);
System.out.print(1);
for(int j=1;j<i-1;j++)
{
int value=c.get(j)+c.get(j+1);
c.set(j,value);
System.out.print(value);
}
if(i!=0)
System.out.print(1);
System.out.println();
}


----------------解决方案--------------------------------------------------------