Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Monster-95
52 / 52 / 13
Регистрация: 05.02.2013
Сообщений: 284
#1

Помогите прокомментировать код - Программирование Android

14.11.2014, 23:17. Просмотров 453. Ответов 11
Метки нет (Все метки)

Нашел на просторах интернете код, может кто сможет описать его для меня.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  public int getWeekOfYear(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int doy = 0;
        while(calendar.get(Calendar.MONTH) > 0) {
            int dec = calendar.get(Calendar.DAY_OF_MONTH) + 2;
            doy += dec;
            date.setTime(date.getTime() - (3600000L * 24) * dec);
            calendar.setTime(date);
        }
        doy += calendar.get(Calendar.DAY_OF_MONTH) - 1;
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        int dow = calendar.get(Calendar.DAY_OF_WEEK);
        dow = (dow + 5) % 7;
        doy = doy - 6 + dow;
        return (doy + 7) / 7 + 1;
    }
Думаю это определение недели с Пн до Вс
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2014, 23:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Помогите прокомментировать код (Программирование Android):

Помогите сократить код конвертера валют - Программирование Android
Есть код конвертера валют со стандартными данными , возможно как то скоротить код. package com.centauri.unitconverter; public...

Помогите прокомментировать код - Assembler
Наткнулся в работе на пример но не могу нормально разобраться. Помогите пожалуйста прокомментировать нормально. : ...

Помогите прокомментировать код программы - C++
Уже не знаю что делать. Вы мой последний шанс. Завтра надо сдать программу, а код не могу понять. Время нету самому в нем разобраться, а...

Конструкторы/деструкторы. Помогите прокомментировать код - C++
massiv massiv::sum(massiv mas1){ int f=0,j,h=0; massiv mas3(mas1.n+this->n); // for(int i=0;i<mas1.n;i++) mas3.mas=mas1.mas;...

Прокомментировать код - C (СИ)
Реализация на C утилиты, похожей на grep. Помогите разобраться с кодом: Main.c #include <stdio.h> #include <stdlib.h> #include...

Прокомментировать код - C#
Ребят, помогите разобраться с кодом. Нужно прокомментировать записи. Спасибо :) using System; using System.Collections.Generic; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Monster-95
52 / 52 / 13
Регистрация: 05.02.2013
Сообщений: 284
16.11.2014, 12:43  [ТС] #2
Ребята может кто нибудь хоть попробует что либо прокомментировать
Nakajinro
2 / 2 / 3
Регистрация: 15.11.2014
Сообщений: 17
16.11.2014, 12:56 #3
помощь нужна по самому алгоритму или же по каждому шагу?
Monster-95
52 / 52 / 13
Регистрация: 05.02.2013
Сообщений: 284
16.11.2014, 13:04  [ТС] #4
Желательно по каждому шагу, в целом Алгоритм примерно понятен но что то могу его даже применить в своих целях
Nakajinro
2 / 2 / 3
Регистрация: 15.11.2014
Сообщений: 17
16.11.2014, 13:33 #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// функция для того чтобы получить номер недели входной даты
public int getWeekOfYear(Date date) {
        Calendar calendar = Calendar.getInstance();                 //  инициализирует экземпляр Calendar с текущими значениями даты и времени
        calendar.setTime(date);                                     //  устанавливает время и дату в заданное параметром date 
        int doy = 0;                                                //  инициализирует переменную для хронения номера дня в году
        while(calendar.get(Calendar.MONTH) > 0) {                   //  цикл который зависит от числа оставшихся месяцев
            int dec = calendar.get(Calendar.DAY_OF_MONTH) + 2;      //  переменная dec принимает число дней в текущем месяце + 2
            doy += dec;                                             //  к doy прибавляем dec
            date.setTime(date.getTime() - (3600000L * 24) * dec);   //  от даты отнимается число дней которые были в dec (3600000L * 24) - это день в миллисекундах
            calendar.setTime(date);                                 //  измененная дата устанавливается в календарь
        }   
        doy += calendar.get(Calendar.DAY_OF_MONTH) - 1;             //  прибавляем к число дней - 1 
        calendar.set(Calendar.DAY_OF_MONTH, 1);                     //  устанавливаем месяц календаря в январь      
        int dow = calendar.get(Calendar.DAY_OF_WEEK);               //  переменная dow - это день недели, записываем в него номер дня в неделе
        dow = (dow + 5) % 7;                                        //  в dow записываем остаток от деления dow + 5
        doy = doy - 6 + dow;                                        //  в doy записываем произведение doy и dow + 6 
        return (doy + 7) / 7 + 1;                                   //  возвращаем значение выражения
    }
Устроит такой вариант или еще объяснить алгоритм?
Monster-95
52 / 52 / 13
Регистрация: 05.02.2013
Сообщений: 284
16.11.2014, 17:45  [ТС] #6
Nakajinro, Спасибо большое! в принципе теперь более мене понятно, мне нужно получить текущую неделю (учебную неделю) узнать первая или вторая неделя, неделя начинается с 01.09.yyyy (первая неделя с 01.09.yyyy по 07.09.yyyy года в целом я написал условие громоздкое условие, как только буду дома покажу код, можете подсказать что лучше выбрать вариант который вы мне написали или вариант который я написал.
Nakajinro
2 / 2 / 3
Регистрация: 15.11.2014
Сообщений: 17
16.11.2014, 18:15 #7
Ок, постараюсь помочь чем смогу.
Если ответ подойдет "+1 спасибо" будет лучшей благодарностью :3
Monster-95
52 / 52 / 13
Регистрация: 05.02.2013
Сообщений: 284
16.11.2014, 20:28  [ТС] #8
Nakajinro,
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
        format1=new SimpleDateFormat("dMMyy");
        String dayString = format1.format(calendar.getTime());
        int dayInt = Integer.parseInt(dayString);   
        if(dayInt <= 70914){
            txtWeek.setText("Первая неделя!");// 01.Пн-Вс.07 //Первая неделя!
        }else if(dayInt <= 140914){
            txtWeek.setText("Вторая неделя!");// 08.Пн-Вс.14 //Вторая неделя!
        }else if(dayInt <= 210914){
            txtWeek.setText("Первая неделя!");// 15.Пн-Вс.21 //Первая неделя!
        }else if(dayInt <= 280914){
            txtWeek.setText("Вторая неделя!");// 22.Пн-Вс.28 //Вторая неделя!
        }else if(dayInt >= 290914 | dayInt <= 51014){
            txtWeek.setText("Первая неделя!");// 29.09.Пн-Вс.05.10 //Первая неделя!         
        }else if(dayInt >= 61014 | dayInt <= 121014){
            txtWeek.setText("Вторая неделя!");// 06.10.Пн-Вс.12.10 //Вторая неделя!
        }else if(dayInt >= 131014 | dayInt <= 191014){
            txtWeek.setText("Вторая неделя!");// 13.10.Пн-Вс.19.10 //Первая неделя!
        }else if(dayInt >= 201014 | dayInt <= 261014){
            txtWeek.setText("Первая неделя!");// 20.10.Пн-Вс.26.10 //Вторая неделя!
        }else if(dayInt >= 271014 | dayInt <= 21114){
            txtWeek.setText("Вторая неделя!");// 27.10.Пн-Вс.02.11 //Первая неделя!
        }else if(dayInt >= 31114 | dayInt <= 91114){
            txtWeek.setText("Первая неделя!");// 03.11.Пн-Вс.09.11 //Вторая неделя!
        }else if(dayInt >=101114 | dayInt <=161114){
            txtWeek.setText("Первая неделя!");// 10.11.Пн-Вс.16.11 //Первая неделя!
        }else if(dayInt >= 171114 | dayInt <= 231114){
            txtWeek.setText("Вторая неделя!");// 17.11.Пн-Вс.23.11 //Вторая неделя!
        }else if(dayInt >=241114 | dayInt <= 301114){
            txtWeek.setText("Первая неделя!");// 24.11.Пн-Вс.30.11 //Первая неделя!
        
 
        }else if(dayInt >= n1 | dayInt <= n2){
            txtWeek.setText("Вторая неделя!");// n1.Пн-Вс.n2 //Вторая неделя!
            /* Где n1 это дата, на понедельник сравниваемая с текущей датой, а где n2 это воскресение сравниваемая с текущей датой */
        }else{
            txtWeek.setText("Первая неделя!");
        }
Вот код который я говорил, не знаю как его упростить или сделать более грамотным если это все таки возможно, а если же нет что лучше использовать первый вариант который вы описали, или же этот ?
Nakajinro
2 / 2 / 3
Регистрация: 15.11.2014
Сообщений: 17
17.11.2014, 10:29 #9
Честно говоря, немного странный пример. По моему в университете такие даты называют четной или нечетной неделей. Ваш вариант слишком громоздкий. Чтобы его переписать точно нужно знать условия. Четная (будем назывть их так) неделя всегда начинается с первого сентября. а есть условия каникул и тд? Вот эту информацию хотелось бы знать.
Monster-95
52 / 52 / 13
Регистрация: 05.02.2013
Сообщений: 284
17.11.2014, 10:45  [ТС] #10
Nakajinro, Нет каникулы не учитываются, просто в каждый год 1 сентябрь первая неделя, а второй семестр начинается с первого февраля где 1 февраля эта первая неделя, как то так
Nakajinro
2 / 2 / 3
Регистрация: 15.11.2014
Сообщений: 17
17.11.2014, 10:54 #11
Через часик доберусь до компа с eclipse, накорябаю алгоритм.
Monster-95
52 / 52 / 13
Регистрация: 05.02.2013
Сообщений: 284
25.04.2015, 11:11  [ТС] #12
Nakajinro, Видимо у вас так и не получилось да ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2015, 11:11
Привет! Вот еще темы с ответами:

Прокомментировать код - C#
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { ...

Прокомментировать код - Assembler
Помогите пожалуйста прокомментировать код программы перевода двоичной тетрады в 16-ричный код: sseg segment stack dw 128 dup...

Прокомментировать код - Bash
please

Прокомментировать код - C (СИ)
что означает int min = 0, sum = 0, index; for(int j = 0; j&lt;10; j++){ min+=matr; index = 0; } ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.04.2015, 11:11
Ответ Создать тему
Опции темы

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