我正在编写一个代码,我必须显示类似于日历视图的输出。
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
答案 0 :(得分:2)
您可以看到您的号码格式已关闭。您使用3位数字和可选*
进行格式化,这意味着有时组合宽度为3,有时为4.这不会排成一行。
但格式真的是:
<2-place number><space or '*'><space or newline>
这是一个由3部分组成的格式,但你可能应该单独进行。
System.out.printf("%2d", i + 1);
System.out.print(month[i] != null ? '*' : ' ');
if (++currentDay < 7) {
System.out.print(' ');
} else {
System.out.println();
currentDay = 0;
}
答案 1 :(得分:0)
看起来您希望日历中的每一天长达3个字符,并且它们之间有空格。此外,看起来单个数字应该更喜欢居中,双数字应该更喜欢左对齐,任何带星号的东西都应该左对齐。
我注意到的第一件事就是这些行是4行,分别是3个字符。
System.out.printf("%3s" + "*", (i+1));
System.out.printf("%3s", (i+1));
因此,带有星号的任何东西都将是4个字符,而没有星号的东西将是3个。仅此一个将导致它们未对齐。
相反,我选择%2s而不是3.您还希望有条件地添加空格或星号,具体取决于项目是否为空。这确保它们每个都是3个字符,然后您可以随时在循环中的每个项目之间添加空格。