2013-09-26 4 views
0
public class calendar 
{ 
    public static void printMonth(int numDays, int startDays) 
    { 
     System.out.println("Su Mo Tu We Th Fr Sa"); 

     for(int j=0; startDays >= j; j++) 
     { 
      if (j==0) 
       System.out.print(" "); 
      else 
       System.out.print(" ");    
     } 
     for (int i=1; numDays >= i; i++) 
     { 
      if (i<=7-startDays) 
       System.out.print(i + " ");  
      else if (i<10) 
       System.out.print(" " + i + " "); 
      else 
       System.out.print(i + " "); 
      if ((i == 7-startDays) || (i % 7+(startDays-7) == 0))   
       System.out.print("\n");     
     } 
    } 
    public static void main(String args[]) 
    { 
     printMonth(28,5); 
    } 
} 

Я написал это в java, чтобы распечатать 2-дневную вещь в календаре, и я могу сказать, что это дрянь и любопытно для более эффективных альтернатив.Что было бы более эффективным способом сделать это?

+2

предложение для читаемости: используйте 'J <= startDays' и' я <= NUMDAYS 'для удобочитаемости. Я не думаю, что когда-либо видел, что сравнение было отменено, как в цикле 'for'. –

+0

В нем есть ошибка: printMonth (28, 0); не работает должным образом! – isnot2bad

+2

Поскольку вы используете «более эффективный» способ, сообщите нам, почему вы считаете, что это неэффективно. –

ответ

2

Это короткая, на мой взгляд, более читаемой форме (которая игнорирует замыкающие пробелы для удобочитаемости):

public static void printMonth(int numDays, int startDay) { 
    System.out.println("So Mo Di Mi Do Fr Sa"); 

    int column = 0; 
    for(int day = 1 - startDay; day <= numDays; day++) { 
     System.out.print(day > 0 ? String.format("%2d ", day) : " "); 
     if (++column % 7 == 0) System.out.println(); 
    } 

    System.out.println(); 
} 
Смежные вопросы