Занятие 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 доведите решение задачи о датах до конца.

Список занятий

CC Attribution-Noncommercial 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0