2012-01-20 79 views
3

パスカルの三角形を生成するために2次元配列を使用する必要がある小さな割り当てがあります。ここに私のコードがあり、それは動作します。私はそうのような三角形を表示する場合は、余分なクレジット機会がある:パスカルの三角形2次元配列形式の出力を印刷

pascal

しかし、私の間隔がそのようにフォーマットされていません。すべての数字が左側に並んで表示されます。説明するのは難しいですが、それを実行すると、私が意味することが分かります。

ここに私のコードです:

import java.util.*; 

public class Pascal { 
public static final int ROW = 16; 

public static void main(String[] args) { 
     int[][] pascal = new int[ROW +1][]; 
    pascal[1] = new int[1 + 2]; 
    pascal[1][1] = 1; 
    for (int i = 2; i <= ROW; i++) { 
     pascal[i] = new int[i + 2]; 
     for (int j = 1; j < pascal[i].length - 1; j++) { 
      pascal[i][j] = pascal[i-1][j-1] + pascal[i-1][j]; 
      } 
    } 
    for (int i = 1; i <= ROW; i++) { 
     for (int j = 1; j < pascal[i].length - 1; j++) { 
      System.out.print(pascal[i][j] + " "); 
     } 
     System.out.println(); 
    } 
} 
} 

誰かが私が絵に所望の出力を生成するために私のプログラムへの正しい間隔を追加する方法を見つけ出す手助けができれば、それは素晴らしい:)だろう、私は知っている私は、システムをどこかに置く必要があります ""どこか知りません。ありがとう!

+0

http://stackoverflow.com/questions/2709993/how-to-center-string-output-using-printf-and-variable-width-java –

+1

'Pascal'あなたに選んだようタグは「パスカルの三角形」ではなく、プログラミング言語を指します。私はそれを削除しました。なぜなら、質問された質問には適切ではないからです。 :) –

答えて

3

ここで私はあなたのコードを修正しました。これは、私のコンソールウィンドウの制限の13まで、ROWサイズまで素晴らしく印刷します。

import java.util.*; 

public class Pascal { 
    public static final int ROW = 12; 
    private static int max = 0; 

    public static void main(String[] args) { 
     int[][] pascal = new int[ROW +1][]; 
     pascal[1] = new int[1 + 2]; 
     pascal[1][1] = 1; 
     for (int i = 2; i <= ROW; i++) { 
      pascal[i] = new int[i + 2]; 
      for (int j = 1; j < pascal[i].length - 1; j++) { 
       pascal[i][j] = pascal[i-1][j-1] + pascal[i-1][j]; 
       String str = Integer.toString(pascal[i][j]); 
       int len = str.length(); 
       if (len > max) 
        max = len; 
      } 
     } 


     for (int i = 1; i <= ROW; i++) {     
      for (int k = ROW; k > i; k--) 
       System.out.format("%-" + max + "s", " "); 
      for (int j = 1; j < pascal[i].length - 1; j++)      
       System.out.format("%-" + (max + max) + "s", pascal[i][j]); 
      System.out.println(); 
     } 
    } 
} 

これが役立つといいと思います。

よろしく

3

大きな数字が占めるスペースに対応するために、特定の数字に空白を追加する必要があるため、スペースの問題が発生しています。最初に、印刷する予定の最大数を(プログラムによって)決定します。次に、その数log(n)の桁数を決定します。この数字を使用すると、数字が印刷されていない数字の空白を印刷して、印刷の見栄えを良くすることができます。