Java程序输出

时间:2016-10-02 01:25:03

标签: java calendar format

我正在编写一个代码,我必须显示类似于日历视图的输出。

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 个答案:

答案 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个字符,然后您可以随时在循环中的每个项目之间添加空格。