Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Java] Задачка для ума, логическая задача 
:(
    Опции темы
Atum
Дата 23.10.2009, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 3.10.2008

Репутация: нет
Всего: нет



Добрый день !

предлагаю всем пользователям отвлечься и порешать такую вот интересную задачу :

имеется  две Даты  ( типа  java.util.Date)  сегодня и какая то другая тестовая  дата 

требуется отнести эту тестовую дату в одну из групп : 

Давно, В прошлом Месяце, 
В этом месяце ,на прошлой неделе, на этой неделе , 
вчера, сегодня, завтра, 
на следующей неделе, В Следующем месяце, Нескоро .

и того 11 групп . 

пользоваться можно только типом дата и его методами 
( Calendar  использовать нельзя , если только настенный  smile )

Пример определения дня : 
Код

  String res = "Неизвестно";

            if (sendDate.getYear() == today.getYear() &&
                    sendDate.getMonth() == today.getMonth() &&
                    sendDate.getDate() == today.getDate()) {
                res = "Сегодня";
            }


Нескоро : 
Код

            if (sendDate.getYear() == today.getYear() 
                    && (today.getMonth() + 1) < sendDate.getMonth()) {
                res = "Нескоро";
            }



для тех кто решит задачу есть , как в школе подпункты (сложность) : 

1)  требуется учитывать - переход через особую точку - это Новый год 
2) требуется учитывать первую неделю в году - что считать первой неделей года
3)  требуется учитывать - что в разных странах неделя начинается по разному 
      с Понедельника или Воскресенья 

4) требуется учитывать что есть переход на летнее и зимнее время 

тому кто придумает самый красивый алгоритм - приз smile))  


для тех кому сложно работать с датами - по 11 группам :

попробуйте для начала распределить по Кварталам и по Декадам

PM MAIL   Вверх
fixxer
Дата 23.10.2009, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: нет
Всего: 27



Почему нельзя пользоваться Calendar? Можно ж написать (скопипастить smile ) свой. Глупая задачка. 


--------------------
user posted image
PM MAIL ICQ   Вверх
ivanovpv
Дата 23.10.2009, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Варвар
**


Профиль
Группа: Участник
Сообщений: 639
Регистрация: 26.1.2005
Где: Москва

Репутация: нет
Всего: 28



Ну да по сути предлагается написать собственный календарь... Или по крайней мере классик обладающий 90% признаков календаря.
Какую тут ищет красоту автор - не понимаю. Класс описывающий календарь - ох он некрасив... Сам лично писал на С++ - а если писать путем то надо отсчитывать високосные дни в общем мраки  smile 

Некое подобие красивости можно соблюсти на самой функции проверяющей признаки, ну типа 
Код

public enum When 
{
    TODAY, YESTERDAY, LASTMONTH, NEXTMONTH
}
public String isWhen(Date original, Date check, When when)
{
      switch(when)
      {
             case TODAY:
                 //
                 break;
             case YESTERDAY:
                 //
                 break;
      }
/*
....*/
}|




--------------------
Aut viam inveniam aut faciam
PM MAIL Skype   Вверх
Ares4322
Дата 23.10.2009, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 25.9.2007
Где: Россия, Москва

Репутация: нет
Всего: 3



Ну это задача не глупая, но с нее обычно начинают изучать Java. Да и не только Java, наверное)
PM MAIL   Вверх
Temdegon
Дата 23.10.2009, 17:26 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 11.10.2008
Где: Minsk

Репутация: нет
Всего: 9



Определяем сколько милисекунд в сутках.
потом вычитаем date1.getTime()  - date2.getTime(), получаем разность дат в милисекундах.
Знак результата покажет проешдая дата или будущая.
Делим результат на кол-во милисек в сутках, и  узнаем сколько дней разница между датами.

PM MAIL   Вверх
goodday1941
Дата 23.10.2009, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 709
Регистрация: 16.7.2006
Где: Украина, Киев

Репутация: нет
Всего: 9



у  java.util.Date с геттеров только метод getTime() не deprecated на данным момент
тоесть в идеале юзать только его нужно, а Вы в ваших примерах используете deprecated методы, что не есть хорошо

ну и далее с класса Date товарищи настоятельно советуют использовать календарь для такого рода задач)

Добавлено через 1 минуту и 55 секунд
Цитата(Ares4322 @  23.10.2009,  17:25 Найти цитируемый пост)
Ну это задача не глупая, но с нее обычно начинают изучать Java. Да и не только Java, наверное) 

не согласен что с такого начинают )

Цитата(Temdegon @  23.10.2009,  17:26 Найти цитируемый пост)
Делим результат на кол-во милисек в сутках, и  узнаем сколько дней разница между датами.

и толку? сегодня понедельник вчера было воскресение ) разница один день а недели разные ;)


--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
Temdegon
Дата 23.10.2009, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 11.10.2008
Где: Minsk

Репутация: нет
Всего: 9



Цитата

и толку? сегодня понедельник вчера было воскресение ) разница один день а недели разные ;) 

да, действительно, лоханулся smile
тогда надо искать алгоритм вычисления дня недели,
типа такого
PM MAIL   Вверх
goodday1941
Дата 23.10.2009, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 709
Регистрация: 16.7.2006
Где: Украина, Киев

Репутация: нет
Всего: 9



да неплохо если знать год месяц и день, а у нас в распоряжении только колличество милисикунд от первого января 1970 года )


--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
powerOn
Дата 23.10.2009, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 1
Всего: 159



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Atum
Дата 23.10.2009, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 3.10.2008

Репутация: нет
Всего: нет



для тех кому не очень интересна такая задача - можете ее и не решать smile 

я нашел два решения . которые меня порадовали. 

скажу сразу - ,как мне кажется , у такой задачи нет строгого математического алгоритма . 

и все решения это просто переборы  и проверка условий. 

Решение date1.getTime()  - date2.getTime() тоже имеет место быть , и если его довести до конца - то наверное будет красиво .


для чего я разместил тут эту задачу: 

 в детстве нас учили работать в числами и цифрами  от 0 до 9 , потом в институте на сказали что есть другие системы исчисления с другим основанием и 1+1 = 10... 

тут я предлагаю поломать голову над тем как мыслить в терминах календаря smile 

проще всего сказать - что задача не имеет  смысла и очень простая, но стоит начать 
 ее решать и вы понимаете что не так все просто smile и есть над чем подумать . 

P.s.
deprecated  методы использовать можно. Это есть в условии .


что я понимаю под красивым решением - это постараться уйти от обычного перебора , а использовать фантазию , 

например взять за основу - 
«Вечный» табель-календарь для определения дня недели любой календарной даты старого и нового стилей.

и находить нужное решение без особых математических расчетов smile 

Это сообщение отредактировал(а) Atum - 23.10.2009, 23:05
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0493 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.