我用Java编写了一个代码来生成Pascal的三角形。我家里有两台笔记本电脑,一台是Windows Vista Home Basic,另一台是Windows 8.1 SingleLanguage,两台都装有相同版本的java。下面提到的代码在Win Vista中运行得非常好,但是当我尝试在Win 8.1上运行相同的代码时会出现逻辑错误。可能的原因是什么?
这是我最近编写的代码草案:
import java.util.*;
class PascalsTriangle
{
int ROW,max=0;
void main ()
{
Scanner sc = new Scanner ( System.in );
System.out.println(" Input the number of rows in the Pascals Triangle to be generated. ");
ROW = sc.nextInt();
int[][] pascal = new int [ROW+1][];
pascal[1] = new int [1+2];
pascal[1][1] = 1;
int i,k=0,j,len=0;
String str="";
for( i=2;i<=ROW;i++ )
{
pascal[i] = new int [i+2];
for( j=i;j<pascal[i].length-1;j++ )
{
pascal[i][j] = pascal[i-1][j-1] + pascal[i-1][j];
str = Integer.toString(pascal[i][j]);
len = str.length();
if( len>max )
{
max = len;
}
}
}
for( i=1;i<=ROW;i++ )
{
for( k=ROW;k>i;k-- )
{
System.out.format( "%-" + max + "s", " " );
}
for( j=i;j<pascal[i].length-1;j++ )
{
System.out.format( "%-" + (max+max) + "s", pascal[i][j] );
}
System.out.println();
}
}
答案 0 :(得分:0)
void main()
似乎仅适用于某些Java版本。我把它写成
class PascalsTriangle
{
public static void main (String[] args)
{
int ROW,max=0;
Scanner sc = new Scanner ( System.in );
System.out.println(" Input the number of rows in the Pascals Triangle to be generated. ");
// ...
但我只得到第一个&#34; 1&#34;在一个下降的位置,这在任何意义上都是一个很好的开始。 ; - )
编辑:发现下一件事
然后从第19行的位置i开始,
for( j=i;j<pascal[i].length-1;j++ )
我绝对会从第2位开始,而不是在第i位。或者您应该使用symmetrie进行更新,同时更新左侧和右侧的值。
在输出时相同:当你只从位置i开始时,如何在第4行得到4个值?
如果我开始在第19行的第2位添加,并在第1位开始输出,那么一切看起来都不错。