2014-11-16 67 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