3

次の形式の出力を取得するコードを記述しましたが、行数を2桁で入力すると、出力形式が変わります。なんで?どうすればこれを修正できますか?

      1
    1 2 1
  1 2 3 2 1
1 2 3 4 3 2 1

これが私のコードです:

import java.util.*;
class PTri {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter the no. of rows for which " +
                "triangle has to be constructed");
        int numrow = sc.nextInt();
        for (int i = 1; i <= numrow; i++) {
            for (int j = 1; j <= numrow - i; j++) {
                System.out.print("  ");
            }
            for (int k = 1; k < i * 2; k++) {
                System.out.print(Math.min(k, i * 2 - k) + " ");
            }
            System.out.println();
        }
    }
}
4

3 に答える 3

2

2 桁の値がアーキテクチャ全体を変更するためです。セットは 1 つの場所に移動します。このように条件を付けることができます。視認性を高めるために、数字の間にスペースを 1 つ追加しました。

import java.util.*;
class PTri {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter the no. of rows for which " +
                "triangle has to be constructed");
        int numrow = sc.nextInt();
        for (int i = 1; i <= numrow; i++) {
            for (int j = 1; j <= (numrow - i); j++) {
                System.out.print("    ");
            }
            for (int k = 1; k < i * 2; k++) {
                int temp = Math.min(k, i * 2 - k);

                if (temp > 9) {
                    System.out.print(temp + "  ");
                } else {
                    System.out.print(temp + "   ");
                }
            }
            System.out.println();
        }
    }
}
于 2012-06-07T15:55:54.053 に答える
1

この例では、桁を数え、桁ごとに余分なスペースを追加します。値の出力は、先行ゼロ (桁数) でフォーマットされます。

public static void main(final String[] args) {
    final Scanner sc = new Scanner(System.in);
    System.out.println("Enter the no. of rows for which " +
            "triangle has to be constructed");
    final int numrow = 100;// sc.nextInt();

    final int digits = (int) Math.log10(numrow) + 1;

    for (int i = 1; i <= numrow; i++) {
        for (int j = 1; j <= numrow - i; j++) {
            System.out.print(" ");
            for (int l = 0; l < digits; l++) {
                System.out.print(" ");
            }
        }
        for (int k = 1; k < i * 2; k++) {
            final int value = Math.min(k, i * 2 - k);
            System.out.print(String.format("%0" + digits + "d ", value));
        }
        System.out.println();
    }
}
于 2012-06-07T16:16:23.690 に答える