Я новичок в Java, и все это функция param/object method (очень отличается от PowerShell) Я хочу написать простую программу, которая представляет объект Date и перед каждым set
, он проверяет, действительна ли дата. Если он недействителен, установите значение по умолчанию.Проверить дату перед изменением в двух разных функциях
У меня возникли проблемы с setDay
, setMonth
и setYear
(только для примера setYear
). setYear
, работающий с одним параметром (год) и isValidDate
, работающий с 3 параметрами (день, месяц, год). Как я могу позвонить isValidDate
в функции набора?
Я не могу изменить main
, но только public/private
функции вызовов.
Набор функций:
public void setYear(int yearToSet){
_year = isValidDate(yearToSet); //??????? PROBLEM ??????? tried:_year = isValidDate(yearToSet) ? yearToSet : DEF_YEAR;
_year = yearToSet;
}
Программа:
public class Date {
// Private vars
private int _day;
private int _month;
private int _year;
// Private finals
private final int MIN_DAY = 1;
private final int MIN_MONTH = 1;
private final int MAX_MONTH = 12;
private final int MIN_YEAR = 1000;
private final int MAX_YEAR = 9999;
private final int DEF_DAY = 1;
private final int DEF_MONTH = 1;
private final int DEF_YEAR = 2000;
// Constructors:
/**
* Creates a new Date object if the date is valid, otherwise creates the date 1/1/2000
* @param day the day in the month(1-31)
* @param month the month in the year(1-12)
* @param year the year (4 digits)
*/
public Date(int day, int month, int year) {
if (isValidDate(day,month,year)) {
_day = day;
_month = month;
_year = year;
}
else
defDate();
}
// Private methods
/**
* Set date to default - 1/1/2000
*/
private void defDate(){
setDay(DEF_DAY);
setMonth(DEF_MONTH);
setYear(DEF_YEAR);
}
/**
* Validate day by month
*/
private int numDaysInMonth(int month, boolean isLeapYear) {
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
if (isLeapYear) {
return 29;
} else {
return 28;
}
default:
return 0;
}
}
/**
* Leap year check
*/
private boolean isLeapYear(int year) {
return (((year % 4 == 0) && !(year % 100 == 0)) || (year % 400 == 0));
}
/**
* Date validate
*/
private boolean isValidDate(int day, int month, int year) {
return (month >= MIN_MONTH && month <= MAX_MONTH) &&
(day >= MIN_DAY && day <= numDaysInMonth(month, isLeapYear(year))) && (year >= MIN_YEAR && year <= MAX_YEAR);
}
/**
* Sets the year (only if date remains valid)
* @param yearToSet - the year value to be set
*/
public void setYear(int yearToSet){
_year = isValidDate(yearToSet); //??????? PROBLEM ???????
_year = yearToSet;
}
nooooo, несколько классов уже могут это сделать ... зачем пытаться изобретать велосипед? –
Я знаю, это проект для учебы. Мы не можем использовать эти классы. – igor