-2

パスカルの三角形を生成するコードを Java で作成しました。自宅に 2 台のラップトップがあり、1 台には Windows Vista Home Basic が搭載され、もう 1 台には 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++ )

私は間違いなく、ポジション i ではなく、ポジション 2 から始めます。または、最適化のために対称を使用して、左右両方の値を更新する必要があります。

出力でも同じです: 位置 i からのみ開始する場合、行 4 で 4 つの値を取得するにはどうすればよいですか?

19 行目の 2 番目の位置から追加を開始し、1 番目の位置から出力を開始すると、すべて問題なく表示されます。

于 2015-08-28T19:43:24.343 に答える