【发布时间】:2014-11-17 22:59:52
【问题描述】:
我完全迷失在这个问题上。我们将创建一个允许用户输入日期(月、日、年)的程序,该程序应打印出该日期并在之后每天递增 1。如果输入的日期是该月的最后一天。月份需要加一,第二天应该从1开始。如果是12月31日,则输入xxx1。那么月、日和年应更改为 1 月 1 日,xxx2。此外,如果日期是闰年。比如说输入是 2009 年 2 月 15 日。如果不是闰年,日期应该增加到 2 月 29 日,它应该打印出 2 月 28 日。
我完全不知道如何解决这个问题。如果有人能指出我正确的方向,我将不胜感激。
这里有什么:
package date;
public class Date
{
private static final int February = 2;
private static final int December = 12;
private int month;
private int day;
private int year;
public Date()
{
month = 1;
day = 1;
year = 2000;
}
public Date(int month, int day, int year)
{
this.month = month;
this.day = day;
this.year = year;
}
public void setMonth(int month)
{
this.month = month;
}
public void setDay(int day)
{
this.day = day;
}
public void setYear(int year)
{
this.year = year;
}
public int getMonth(int month)
{
return month;
}
public int getDay(int day)
{
return day;
}
public static int getYear(int year)
{
return year;
}
public boolean nextDay()
{
boolean leapYear = false;
int currentMonthMaxDays;
int [] daysInMonths = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
currentMonthMaxDays = daysInMonths[month];
if(day < currentMonthMaxDays)
{
day = day + 1;
day++;
}
else if(month == February && leapYear && day == 28)
{
day = 29;
day++;
}
else day = 1;
if(month != December)
month +=1;
else
year+=1;
month = 1;
while(!leapYear)
{
if(year % 400 ==0)
leapYear = true;
else if(year % 4 == 0 && year % 100 != 0)
leapYear = true;
}
return leapYear;
}
}
我认为我正确地完成了 Date.java 类,我的问题在于主类。我们必须创建一个将日期递增 1 的数组。我试图查看每月最多 30-31 天。
这是 DateTest 主要内容:
package date;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JOptionPane;
public class DateTest {
public static void main(String[] args)
{
Date [] date = new Date[2];
for(int i = 1; i < date.length; i++)
{
JOptionPane.showInputDialog("Enter Date (e.g. 19991231): ");
date[i] = new Date();
i++;
}
new SimpleDateFormat("EEEE, MMMM d, yyyy");
JOptionPane.showMessageDialog(null, "Date: " + date, "Results", JOptionPane.PLAIN_MESSAGE);
}
}
我肯定知道我的主干很顶。我真的迷失了这个任务。
【问题讨论】:
-
为什么不使用
java.util.Calendar -
@JigarJoshi 好吧,根据问题的措辞(“我们必须这样做”),这可能是针对一堂课的,弄清楚这背后的数学逻辑是作业的一部分任务。
-
我认为问题出在你的测试课上......
-
将日期存储为 1970 年 1 月 1 日之后的天数可能会更简单。您必须将日期转换为整数,然后将整数转换为日期,但是天数的增量会很简单。
-
你的问题不是很清楚——你想在下个月之前打印第二天还是接下来的所有日子,还是什么?为什么你的
nextDay函数返回一个布尔值?