2014-11-16 39 views
0

所以我必须做一个java程序,它将增加和打印每个日期从用户输入的日期。我无法实际打印增量。我有什么错误。自从它到期之后,我已经交出了我所拥有的东西,但仍然想要解决问题。我也喜欢使用JOptionPane,但是我对此很不好。这是我第一次。在java中的日期增量

指令: 创建一个名为Date.java的程序对初始值执行错误检查,例如:字段月份,日期和年份。另外,提供一个nextDay()方法来增加一天。 Date对象应始终保持一致的状态。

编写一个名为DateTest.java的程序,提示用户输入月份,日期和年份作为数字值。这个程序然后使用刚刚创建的Date类创建一个Date对象并测试nextDay()方法。这可以在40次迭代循环中完成:Date对象调用nextDay()方法并在循环的每次迭代期间输出日期。这个循环是为了说明nextDay()方法正常工作。测试以下情况:

递增到下个月,例如,使用日期:2011年2月28日 递增到明年,例如,使用日期:2011/11/27 递增到下一个月在一个闰年,例如,使用日期:02/28/2012 示例程序输出:

检查增量 Date对象的构造日期2011/11/27 步达成日期:11/28/2011 步达成日期:2011/11/29 增加日期:11/30/2011 第31天无效。设置为每日1次。 步达成日期:2011/12/1 步达成日期:12/2/2011 ... 步达成日期:2011/12/30 步达成日期:12/31/2011 32天无效。设为第1天。 递增日期:2012/1/1 递增日期:1/2/2012 递增日期:1/3/2012 递增日期:1/4/2012 递增日期:1/5/2012 步达成日期:2012/1/6

我的代码:

//date.java类

import javax.swing.JOptionPane; 
import java.util.Scanner; 

public class Date 
{ 
    private int MIN_YEAR = 1990; 
    private int MAX_YEAR = 2050; 
    private int DEFAULT_YEAR = 2012; 
    private int MIN_MONTH = 1; 
    private int MAX_MONTH = 12; 
    private int DEFAULT_MONTH = 1; 
    private int MIN_DAY = 1; 
    private int MAX_DAY = 31; 
    private int DEFAULT_DAY = 1; 
    private int year = 2012; 
    private int month = 1; 
    private int day = 1; 
    private int daysInMonth[] = {31,28,31,30,31,30,31,31,30,31,30,31}; 


    public Date() 
    { 
     month = DEFAULT_MONTH; 
     day = DEFAULT_DAY; 
     year = DEFAULT_YEAR; 
    } 

    public Date(int year, int month, int day) 
    { 
     this.month = month; 
     this.year = year; 
     this.day = day; 
    } 

    public void setYear(int year) 
    { 
     if(year < MIN_YEAR || year > MAX_YEAR) 
     { 
      System.out.println("The year entered has to be between" + MIN_YEAR + "-" + MAX_YEAR + ". Try Again!"); 

     } 
     else 
     { 
      this.year = year; 
     } 
    } 
    public int getYear() 
    { 
     return year; 
    } 

    public void setMonth(int month) 
    { 
     if(month < MIN_MONTH) 
     { 
      this.month = MIN_MONTH; 
     } 
     else if(month > MAX_MONTH) 
     { 
      this.month = MAX_MONTH; 
     } 
    } 

    public int getMonth() 
    { 
     return month; 
    } 

    public void setDay(int day) 
    { 
     if(month < MIN_DAY) 
     { 
      this.month = MIN_DAY; 
     } 
     else if(month > MAX_DAY) 
     { 
      this.month = MAX_DAY; 
     } 
    } 

    public int getDAY() 
    { 
     return day; 
    } 

    public void nexyDay() 
    { 
     int currentMonthMaxDays = daysInMonth[month]; 
     boolean leapYear = isLeapYear(); 
     if(day < currentMonthMaxDays) 
     { 
      day += 1; 
     } 
     else if(month == 2 && leapYear == true && day == 28) 
     { 
      day = 29; 
     } 
     else 
     { 
      day = 1; 
      if(month!= 12) 
      { 
       month += 1; 
      } 
      else 
      { 
       year +=1; 
       month = 1; 
      } 
     } 
    } 
     public String toString() 
     { 
      return month + "/" + day + "/" + year; 
     } 

     private boolean isLeapYear() 
     { 
      boolean leapYear = false; 
      if(year % 400 == 0) 
      { 
       leapYear = true; 
      } 
      else if (year % 4 == 0 && year % 100 != 0) 
      { 
       leapYear = true; 
      } 
      return leapYear; 


     } 

    } 



    //my datetest class 

import javax.swing.JOptionPane; 
import java.util.Scanner; 

public class DateTest { 

    public static void main(String[] args) 
    { 
     Date[] date = new Date[1]; 
     for (int i = 0; i < date.length; i++) 
     { 

      System.out.print("Enter deired Year: "); 
      int year = new Scanner(System.in).nextInt(); 
      System.out.print("Enter deired Month: "); 
      int month = new Scanner(System.in).nextInt(); 
      System.out.print("Enter deired Day: "); 
      int day = new Scanner (System.in).nextInt(); 
      date[i].nextDay(year, month, day); 
     } 
     for (int i = 0; i < 40; i++) 
     { 

      date[i].nextDay(); 
      System.out.print("Incremented Date:" + date[i].toString()); 
     } 
    } 

} 
+0

有特殊的方法Calendar.add()用于这一目的,见http://stackoverflow.com/a/1005550/1028256 – Mixaz

+0

因为这是你的任务,你试图执行'nextDay()'? –

回答

0

据我了解你的NullPointerException。你忘了用值初始化你的日期数组。您也可以初始化扫描仪一次。

Scanner scanner = new Scanner(System.in); // <== the only scanner initialization. 
for (int i = 0; i < date.length; i++) { 
    System.out.print("Enter deired Year: "); 
    int year = scanner.nextInt(); 
    System.out.print("Enter deired Month: "); 
    int month = scanner.nextInt(); 
    System.out.print("Enter deired Day: "); 
    int day = scanner.nextInt(); 
    date[i] = new Date(year, month, day); // <== fix initialization. 
} 
for (int i = 0; i < date.length; i++) { // cycle #1: over all initialized dates 
    for (int j = 0; j < 40; i++) {  // cycle #2: 40 repeats for each date 
     date[i].nextDay(); 
     System.out.print("Incremented Date:" + date[i].toString()); 
    } 
} 
+0

我改变了你的你的例子@ursa但我收到日期的错误。他们都说“日期不能解决变数”。我该如何解决这部分? – user3285102

+0

you lose“Date [] date = new Date [1];”声明在你的方法开始 – ursa