Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

java:elective:lesson_10_09_13 [08/10/2013 22:55] (текущий)
Николай Баженов создано
Строка 1: Строка 1:
 +====== Занятие 09.10.13 ======
  
 +Рассмотрим следующую задачу:​
 +
 +===== Задача =====
 +
 +С клавиатуры вводится четыре натуральных числа: ''​d''​ (номер дня), ''​m''​ (номер месяца),​ ''​y''​ (номер года) и ''​n''​. Напечатайте в консоли дату, которая наступит через ''​n''​ дней после даты ''​d.m.y''​.
 +
 +//​Пример://​ Ввели следующие 4 числа: 2, 1, 2012, 58. Через 58 дней после 2 января 2012 года наступает 29 февраля 2012 года, поэтому в консоли должна быть напечатана следующая дата: ''​29.02.2012''​.
 +
 +//​Замечание://​ Год с номером ''​y''​ является високосным,​ если либо ''​y''​ кратно 4, но не кратно 100; либо ''​y''​ кратно 400. Например,​ 2000 -- високосный год, а 2100, 2200 и 2300 -- не високосные годы.
 +
 +===== Решение =====
 +
 +Создадим новый класс ''​Date'',​ который является представлением даты. Для хранения самой даты нам понадобятся поля ''​day''​ (день), ''​month''​ (месяц) и ''​year''​ (год). Также напишем два метода:​
 +  * ''​Date()''​ - конструктор,​ позволяющий создавать дату по данным дню, месяцу и году;
 +  * ''​addOneDay()''​ - метод, который прибавляет к данной дате один день.
 +
 +Кроме того, нам оказался нужным еще один вспомогательный метод ''​isLeapYear()'',​ позволяющий проверять год на високосность.
 +
 +<code java>
 +package com.nsunc.wiki.penname;​
 +
 +public class Date {
 + private int day;
 + private int month;
 + private int year;
 + private static int[] daysInMonth = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30,
 + 31 };
 +
 + /*
 + * Проверка того, является ли год y високосным.
 + */
 + public static boolean isLeapYear(int y) {
 + if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
 + return true;
 + else
 + return false;
 + }
 +
 + /*
 + * Конструктор.
 + */
 + Date(int d, int m, int y) {
 + day = d;
 + month = m;
 + year = y;
 + }
 +
 + /*
 + * Прибавляем к дате один день.
 + */
 + public void addOneDay(){
 + if(month != 2 || (month == 2 && !isLeapYear(year))){
 + if(day < daysInMonth[month-1])
 + day++;
 + else if(month != 12){
 + day = 1;
 + month++;​
 + } else {
 + day = 1;
 + month = 1;
 + year++;
 + }
 + } else{
 + if(day <= daysInMonth[month-1])
 + day++;
 + else{
 + day = 1;
 + month++;​
 + }
 + }
 + }
 +}
 +
 +</​code>​
 +
 +===== Задание =====
 +
 +Допишите в полученном классе метод ''​toString()'',​ позволяющий преобразовывать хранимую дату в строку формата ''​DD.MM.YYYY''​. Он должен выглядеть так:
 +
 +<code java>
 + public String toString(){
 + //  Здесь будет Ваш код.
 + }
 +</​code>​
 +
 +Например,​ если хранимая дата - это 1 февраля 2013 года, то должна быть выдана строка ''​01.02.2013''​.
 +
 +<note warning> С помощью полученного класса ''​Date''​ доведите решение задачи о датах до конца.</​note>​
 +
 +
 +
 +
 +
 +
 +;#;
 +[[java:​elective|Список занятий]]
 +;#;
CC Attribution-Noncommercial 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0