-2

我用 Java 编写了一个代码来生成一个帕斯卡三角形。我家里有两台笔记本电脑,一台装有 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();
        }
    }
4

1 回答 1

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. ");

// ...

但是我只得到了下降位置的第一个“1”,这在任何意义上都是一个很好的开始。;-)

编辑:接下来的事情发现

然后你从第 19 行的位置 i 开始,在

     for( j=i;j<pascal[i].length-1;j++ )

我肯定会从位置 2 开始,而不是从位置 i 开始。或者你应该更新两个值,左边和右边,使用对称进行优化。

输出相同:当您仅从位置 i 开始时,如何在第 4 行获得 4 个值?

如果我在第 19 行的位置 2 开始添加,并在位置 1 开始输出,一切看起来都很好。

于 2015-08-28T19:43:24.343 回答