Я пытаюсь создать класс Date(), однако, я думаю, что мои переменные могут работать некорректно или я нарушаю какое-то неясное правило класса? Один ключ у меня был во время отладки ... он направил меня к «thread.Class» и отображается следующий код:Почему этот метод всегда возвращает ноль?
private void exit() {
if (group != null) {
group.remove(this);
group = null;
}
Я не уверен, что это значит. Это мой первый раз, когда я создал свой собственный класс. Я думаю, что это может вызвать «System.out.println (today.daysTo (yearFromNow)); для возврата нуля. Это также может быть связано с объемом некоторых моих переменных. Мой профессор сказал нам, что мы должны использовать частные переменные, но он не совсем понял это, по крайней мере, для меня. Вот код, который я до сих пор:
public class Date {
private int year;
private int month;
private int day;
public static void main(String[] args) {
Date today = new Date(2010,10,22);
Date today2 = new Date(2010,10,22);
Date yearFromNow = new Date(2011,10,22);
System.out.println(today.daysTo(yearFromNow));
System.out.println(today.getMonth());
System.out.println(today.getYear());
System.out.println(today.equals(today2));
System.out.println(today.compareTo(yearFromNow));
System.out.println(today.toString());
}
public Date (int year1, int month1, int day1){
if (year1 <= 0 || month1 <= 0 || month1 > 12 || day1 <= 0 || day1 > 31){
throw new IllegalArgumentException("Input a valid d/m/y.");
}
year = year1;
month = month1;
day = day1;
}
//Modifies current date by adding specified number of days; Not completed yet.
public void addDays (int days){
int numberOfDays = daysBeforeMonth(this.month, this.year)+this.day+days;
if (numberOfDays <= 31){
this.month = 1;
}
}
//Returns number of days to specified date.
public int daysTo (Date d){
int presentDate = dayOfYear(this.day, this.month, this.year);
int futureDate = dayOfYear(d.day, d.month, d.year);
return (futureDate - presentDate);
}
//Returns the number of the month in specified Date;
public int getMonth(){
return this.month;
}
//Returns the number of the year in specified Date;
public int getYear(){
return this.year;
}
// Reports whether or not this and d represent the same date.
public boolean equals (Date d){
return this.day == d.day &&
this.month == d.month &&
this.year == d.year;
}
// Returns negative if this is earlier than d, returns positive
// if this is later than d, and returns zero otherwise.
public int compareTo (Date d){
if (this.month < d.month || this.day < d.day || this.year < d.year){
return -1;
}
if (this.month > d.month || this.day > d.day || this.year > d.year){
return 1;
}
else return 0;
}
// Converts this Date into string form, using the format
// mm/dd/yyyy, as in 07/22/2006.
public String toString(){
String stringDate = month+"/"+day+"/"+year;
return stringDate;
}
// takes an int year and tests whether year is divisble by 4, but
// not 100 OR if it's divisible by 400 => is leap year, else not.
public static boolean isLeapYear(int year) {
if (year % 4 == 0 && year % 100 != 0) {
return true;
}
else if (year % 400 == 0) {
return true;
}
else {
return false;
}
}
//Returns how many days before a certain month, else returns 0.
public static int daysBeforeMonth(int month, int year) {
int Feb = 28;
if (isLeapYear(year) == true) {
month = 29;
}
if (month == 1) {
return 0;
} else if (month == 2) {
return 31;
} else if (month == 3) {
return Feb + 31;
} else if (month == 4) {
return Feb + 61;
} else if (month == 5) {
return Feb + 92;
} else if (month == 6) {
return Feb + 122;
} else if (month == 7) {
return Feb + 153;
} else if (month == 8) {
return Feb + 184;
} else if (month == 9) {
return Feb + 215;
} else if (month == 10) {
return Feb + 245;
} else if (month == 11) {
return Feb + 276;
} else if (month == 12) {
return Feb + 306;
}
else {
return 0;
}
}
//Returns how many days have passed in reference to a specific date.
public static int dayOfYear(int day, int month, int year){
return daysBeforeMonth(month, year) + day;
}
}
Если кто-то может объяснить, пожалуйста, мне, где я неправильно в моей логике это было бы здорово! Благодаря!
@RD мне кажется, что он разрешает только 1..12. –
Мех, ты прав. –