Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
2 / 2 / 1
Регистрация: 15.10.2013
Сообщений: 15
1

Вывод календаря на заданый месяц. Не могу понять почему вывод странный такой

14.12.2015, 21:01. Показов 1707. Ответов 1
Метки нет (Все метки)

Суть в том, что никак не считает правильно пробелы в первой неделе. Постоянно бред какой-то получается. При любом месяце. Задавал уже разные годы и месяцы. Не пойму в чем беда. Помогите.
Java
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package javaapplication1;
 
import java.text.DateFormatSymbols;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
 
/**
 * Created by Олег on 05.12.2015.
 */
public class JavaApplication1 {
    public static void main(String[] args){
        Date time = new Date();
        System.out.println(time);
        GregorianCalendar now = new GregorianCalendar();
        int today = now.get(Calendar.DAY_OF_MONTH);
        int month = now.get(Calendar.MONTH);
        now.set(Calendar.DAY_OF_MONTH, 1);
        int weekday = now.get(Calendar.DAY_OF_WEEK);
        int FirstDayOfWeek = now.getFirstDayOfWeek();
        int in = 0;
        while (weekday != FirstDayOfWeek){
            in++;
            now.add(Calendar.DAY_OF_MONTH, -1);
            weekday = now.get(Calendar.DAY_OF_WEEK);
        }
        String [] WeekDayNames = new DateFormatSymbols().getShortWeekdays();
        do{
            System.out.printf("%4s", WeekDayNames[weekday]);
            now.add(Calendar.DAY_OF_MONTH, 1);
            weekday = now.get(Calendar.DAY_OF_WEEK);
        }while(weekday != FirstDayOfWeek);
        System.out.println();
        for(int i = 1; i<=in; i++)
            System.out.print(" ");
        
        now.set(Calendar.DAY_OF_MONTH, 1);
        do{
            int day = now.get(Calendar.DAY_OF_MONTH);
            System.out.printf("%3d", day);
            if(day == today)
                System.out.print("*");
            else
                System.out.print(" ");
            now.add(Calendar.DAY_OF_MONTH, 1);
            weekday = now.get(Calendar.DAY_OF_WEEK);
            if (weekday == FirstDayOfWeek)
                System.out.println();
        }
        while(now.get(Calendar.MONTH) == month);
        if(weekday != FirstDayOfWeek)
            System.out.println();
    }
}
Вывод календаря на заданый месяц. Не могу понять почему вывод странный такой

Первое число должно быть во вторник. Програма работает верно, так как выводит в первой неделе только 6 дней. Но...пробелы.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.12.2015, 21:01
Ответы с готовыми решениями:

Вывод календаря на заданный месяц
Здравствуйте. Дали задание, никак не могу с ним совладать... Задана дата в виде месяц, год. Вывести...

Не могу понять как делать вывод на экран структуры STUDENT на заполнение и вывод данных на экран
Добрый вечер. Вот задание и мой код программы на C++ Не выходит нормально реализовать 3е...

Не могу разобраться с классом. Странный вывод
Имеется программа по вычислению площади прямоугольника по координатам двух его углов: #include...

Почему такой вывод?
Все привет! Кто-нибудь может объяснить, почему так происходит? .map(parseInt) Выводит ...

1
34 / 34 / 21
Регистрация: 01.11.2013
Сообщений: 319
15.12.2015, 11:24 2
Вот так можно:
Отступ на всех месяцах не тестировал, подправишь как надо.
Java
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
public class JavaApplication1 {
    public static void main(String[] args){
        Date time = new Date();
        System.out.println(time);
        GregorianCalendar now = new GregorianCalendar();
        int today = now.get(Calendar.DAY_OF_MONTH);
        int month = now.get(Calendar.MONTH);
        now.set(Calendar.DAY_OF_MONTH, 1);
        int weekday = now.get(Calendar.DAY_OF_WEEK);
        int FirstDayOfWeek = now.getFirstDayOfWeek();
        int in = 0;
        while (weekday != FirstDayOfWeek){
            in++;
            now.add(Calendar.DAY_OF_MONTH, -1);
            weekday = now.get(Calendar.DAY_OF_WEEK);
        }
        String [] WeekDayNames = new DateFormatSymbols().getShortWeekdays();
        do{
            System.out.print("   "+WeekDayNames[weekday]);
            now.add(Calendar.DAY_OF_MONTH, 1);
            weekday = now.get(Calendar.DAY_OF_WEEK);
        }while(weekday != FirstDayOfWeek);
        System.out.println();
        
//        for(int i = 1; i<=in; i++)   не понял зачем тебе это надо было
//            System.out.print(" ");
        
        now.set(Calendar.DAY_OF_MONTH, 1);
        boolean flag=true;
        do{
            int day = now.get(Calendar.DAY_OF_MONTH);
            int temp=now.get(Calendar.DAY_OF_WEEK);
            if(flag){
                switch(temp){
                    case 1:
                        System.out.printf("%30s", "");
                        flag=false;
                        break;
                    case 2:
                        flag=false;
                        break;
                    case 3:
                        System.out.printf("%5s","");
                        flag=false;
                        break;
                    case 4:
                        System.out.printf("%10s", "");
                        flag=false;
                        break;
                    case 5:
                        System.out.printf("%15s","");
                        flag=false;
                        break;
                    case 6:
                        System.out.printf("%20s","");
                        flag=false;
                        break;   
                    case 7:
                        System.out.printf("%25s","");
                        flag=false;
                        break;                          
                }
            }
            //System.out.println("temp= "+ temp);
            System.out.printf("%4d", day);
            if(day == today)
                System.out.print("*");
            else
                System.out.print(" ");
            now.add(Calendar.DAY_OF_MONTH, 1);
            weekday = now.get(Calendar.DAY_OF_WEEK);
            if (weekday == FirstDayOfWeek)
                System.out.println();
        }
        while(now.get(Calendar.MONTH) == month);
        if(weekday != FirstDayOfWeek)
            System.out.println();
    }
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.12.2015, 11:24

Почему вывод такой карявый
string id_devicetype = &quot;&quot;; for (int i = 0; i &lt; 200; i++) { ...

Почему вывод в консоли на Debian не такой как на Windows
Всем привет, подскажите почему вывод не в таблице.... Имеется код следующего вида (Вывод...

Как работает данный код и почему такой вывод?
Написал какой-то код, выводит в дебаге 5 в релизе 0 #include &lt;iostream&gt; using namespace std;...

Почему такой бредовый вывод типов и как с этим быть?
Если так let add (a:float) (b:float) (c:float) = b * b - a * c;; то всё нормально val...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.