мета-данные страницы
Занятие 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()
, позволяющий проверять год на високосность.
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++; } } } }
Задание
Допишите в полученном классе метод toString()
, позволяющий преобразовывать хранимую дату в строку формата DD.MM.YYYY
. Он должен выглядеть так:
public String toString(){ // Здесь будет Ваш код. }
Например, если хранимая дата - это 1 февраля 2013 года, то должна быть выдана строка 01.02.2013
.
Date
доведите решение задачи о датах до конца.