2016-10-02 5 views
0

私は、カレンダー表示に似た出力を表示する必要があるコードを書いています。Javaプログラム出力

Sun Mon Tue Wed Thu Fri Sat 
    1 2* 3 4 5 6 
7 8 9 10 11* 12* 13 
14* 15* 16* 17 18 19* 20 
21 22 23 24 25* 26* 27 
28* 29 30 

ここにコードがあります。

System.out.println("Sun Mon Tue Wed Thu Fri Sat"); 
int currentDay = 0; 
for(int i = 0; i<randDay; i++){ 
    System.out.print(" "); 
    currentDay++; 
} 
for(int i = 0; i< month.length; i++){ 
    if(month[i]!=null){ 
    System.out.printf("%3s" + "*", (i+1)); 
    currentDay++; 
    }else{ 
    System.out.printf("%3s", (i+1)); 
    currentDay++; 
    } 
    if(currentDay==7){ 
    currentDay=0; 
    System.out.println(); 
    } 

私のコードでうまく並べることができません。誰もこれで私を助けることができますか?これは私のコードの一部です。それが必要なのかどうか、私はその質問を説明することができます。

私の出力は次のようになります。

Sun Mon Tue Wed Thu Fri Sat 
       1 2 3 4 
    5 6 7* 8 9 10 11* 
12* 13 14 15 16 17 18 
19 20 21 22 23* 24* 25 
26 27* 28 29* 30 


Sun Mon Tue Wed Thu Fri Sat 
         1 2 
    3 4 5* 6 7 8 9* 
10* 11 12 13 14 15* 16 
17* 18* 19 20 21 22 23 
24 25 26* 27 28* 29 30 
31 

答えて

2

表示されているように、番号の書式設定はオフです。あなたは3桁の数字で書式を設定しています。オプションで*となっています。これは、幅が3と4になることがあることを意味します。

しかし、フォーマットが本当にある:

あなたはおそらくそれらを個別に行う必要がありますけれども、3部構成のフォーマットである
<2-place number><space or '*'><space or newline> 

System.out.printf("%2d", i + 1); 
System.out.print(month[i] != null ? '*' : ' '); 
if (++currentDay < 7) { 
    System.out.print(' '); 
} else { 
    System.out.println(); 
    currentDay = 0; 
} 
+0

"?" System.out.printで行うのですか? –

+0

@Saad See:[Javaとは何ですか?:オペレータが呼び出され、それは何ですか?](http://stackoverflow.com/q/798545/5221149) – Andreas

0

カレンダーの各日を3文字にして、その間にスペースを入れたいと思うようです。さらに、1桁の数字は中央揃え、2桁の数字は左揃え、アスタリスクは何も配置しないようにしてください。

最初に気付くのは、これらの行はそれぞれ4文字3文字です。したがって

System.out.printf("%3s" + "*", (i+1)); 
System.out.printf("%3s", (i+1)); 

、アスタリスクを使って何が彼らがずれることになります。3.これだけだろうのない4つの文字と何になるだろう。

代わりに、私は3の代わりに%2sを選択します。また、項目がnullでないかどうかに応じて、後に条件付きで空白またはアスタリスクを追加することもできます。これにより、それぞれが3文字であることが保証され、ループ内の各項目の間に常にスペースを追加できます。

関連する問題