2013-09-03 4 views
0

Привет, я новичок, и я очень злюсь на эту проблему, потому что не могу понять. Вопрос в том, чтобы сделать календарь с помощью NESTED LOOPS, может ли кто-нибудь помочь мне? Календарь должен несколько выглядеть как на картинке ниже, даты должны быть соответствующий день недели, а также должны выглядеть как календарь выглядит (пространства, структура ...)Вложенные циклы, как сделать календарь

 Su M T W Th F Sa 
        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 

Все, что я знаю, как для создания столбцов и строк, заполненных «x».

public class sumfOddsInNumber 
{ 
    public static void main(String[] args) 
    { 
     for (int r = 1; r <= 6; r++) 
     { 
      for(int c = 1; c <= 7; c++) 
      { 
       System.out.print("x"); 
      } 
      System.out.println(); 
     } 
    } 
} 
+0

StringBuffer (или) StringBuilder, метод append() и toString(). – kosa

+0

нужно начинать со среды? – nachokk

+0

Да, начиная с wensdayy –

ответ

1

Похоже, что это проблема домашней работы, поэтому я не буду давать вам код, но вы направляетесь в правильном направлении. Во-первых, я изменил бы

System.out.print("x"); 

в

System.out.print(" x"); //Add two spaces in front of the x 

поэтому у вас есть пространство между числами. Затем, чтобы генерировать действительные числа вместо x, положите int dayOfMonth = 1; выше цикла for. Затем вы захотите распечатать dayOfMonth вместо x. Проблема, которую я оставляю вам, заключается в том, как увеличить значение dayOfMonth каждый раз.

+0

Я думаю, что количество «пробелов» в 'System.out.print (« x »);' должно меняться, потому что число дней не всегда совпадает с числом цифр. – pinckerman

+0

Правда, это будет варьироваться в зависимости от того, какое именно число печатается, но первое, что нужно сделать OP, - это распечатать номера, а затем распечатать их, начиная с правильного дня. Когда это будет сделано, и пришло время выстроить числа, 'String.format()' пригодится. –

+0

Если он едва может сделать вложенный цикл, я думаю, ему нужно научиться использовать String.format() – pinckerman

1

Это не проблема программирования, это вопрос логики. Если бы вы сосредоточились примерно на 4 минуты подряд, вы бы поняли это. Но я думаю, что никто больше не проводит время с домашней работой. Вот как рождаются плохие программисты, пожалуйста, учитесь иметь больше амбиций, чем консервный нож.


Я сделал вам небольшой, стильный пример, который делает именно то, о чем вы просите.

Код не оптимизирован. Я просто оставил его, как я думал (да, 4 минуты). Пожалуйста, найдите время, чтобы просмотреть и улучшить этот пример. Все объясняется комментариями.

/** 
* The parameters indicate where the month starts, 
* and where it ends. 
* 
* @author ggrec 
* 
*/ 
public class Calendar 
{ 
    private static final String WEEKDAYS = "Su Mo Tu We Th Fr Sa"; 
    private static final String NEW_LINE = "\n"; 
    private static final String EMPTY_STRING = " "; 
    private static final String TRIPLE_EMPTY_STRING = " "; 

    public static void main(final String[] args) 
    { 
     final String calendarString = getFormattedCalendar(4, 6); 

     System.out.println(calendarString); 
    } 

    private static String getFormattedCalendar(final int startDay, final int endDay) 
    { 
     // Create StringBuilder 
     final StringBuilder calendar = new StringBuilder(); 

     // Append weekdays to string header 
     calendar.append(WEEKDAYS).append(NEW_LINE); 

     // This will keep track of days 
     int day = 1; 

     for (int i = 1; i <= 5; i++) // Week loop 
     { 
      for (int j = 1; j <= 7; j++) // Weekday loop 
      { 
       // If we are on the last week of the month, 
       // and we've reached the endDay that we specified, 
       // simply return the assembled string 
       if (i == 5 && j == endDay + 1) 
        return calendar.toString(); 

       // These are the empty spaces for the beginning of 
       // the first week 
       if (i == 1 && j < startDay) 
       { 
        // Just append empty space, then CONTINUE 
        // to next iteration (j++) 
        calendar.append(TRIPLE_EMPTY_STRING); 
        continue; 
       } 

       // Check if the day is a single or double digit 
       if (day/10 >= 1) 
        calendar.append(day++).append(EMPTY_STRING); 
       else 
        // If this is the first week, then it means that 
        // we have single-digit days. Apply strings on each 
        // side of the day for proper spacing of digits 
        calendar.append(EMPTY_STRING).append(day++).append(EMPTY_STRING); 
      } 

      calendar.append(NEW_LINE); 
     } 

     return calendar.toString(); 
    } 
}