-1
public static void main(String args[])
{

    Scanner scan = new Scanner(System.in);
    int n = scan.nextInt();
    scan.nextLine();
    String[] label = new String[n];
    int[] data = new int[n];


    for(int i=0; i<n*2; i++)
    {
        if (i<n)
        {
            label[i] = scan.nextLine();
        }
        if (i >= n)
        {
            data[i-n] = scan.nextInt();
        }
    }   

    for(int i=0; i<n; i++)
    {
        String a = "";
        for(int j=0; j<data[i]; j++)
        {
            a = a + "*";
            if(j==(data[i]-1)) System.out.println();
        }
        System.out.printf("%15s  %-7s", label[i], a);
    }
}

入力中

5
Sidney
Washington DC
London
New York
The New City of a Lot of Letters
4
8
10
3
12

入力の文字数に合わせてフォーマットを調整する方法がわかりません。このコードを実行すると、The New City of a Lot of Letters が書式設定を台無しにします。書式設定された印刷内で変数値をどのように使用できますか?

これは、最後の行がどのように印刷されるかを除いて、私が望むものです。コードはそのフラッシュを左に出力する必要があります。

ここに画像の説明を入力

4

3 に答える 3

1
System.out.printf("%15s  %-7s", label[i], a);

左からのインデントが15で、 The New City of a Lot of Letters の長さが32であるため、機能しない理由です。
に変更%15sする%32sと、問題が解決するはずです。
編集:
入力に基づいてインデントを変更するには、次のようなものを追加します:

int length = 0;
for (int i = 0; i < label.length(); i++) {
    if (label[i].length() > length) {
        length = label[i].length();
    }
}

// do your stuff

System.out.printf("%" + length + "s  %-7s", label[i], a);
于 2013-10-15T20:54:02.740 に答える
0

問題が何であるかは明らかではありません。長さ/パディング指定子は出力の整列に役立ちますが、考えられるすべての入力を考慮する必要があります。つまり、データを繰り返し処理し、最大長を見つけて、その最大長変数を何らかの方法 (例: maxStringLength+5) で使用して特定の列の幅を定義するフォーマット文字列を作成します。

いくつかの Java ASCII テーブル ライブラリのいずれかを使用する方がおそらく簡単でしょう。

于 2013-10-15T20:26:31.660 に答える