2014-01-28 50 views
1

Noob在這裏,所以忍受着我......我正在研究一個Java程序,它接受來自JoptionPane的用戶輸入,並使用一組if-else語句來驗證日期,同時考慮閏年。我在運行時遇到的問題是它驗證了不可能的日期。例如,2014年2月29日,它表示這是一個有效的日期,但事實上並非如此。 關於這個問題的見解將不勝感激。Java有效日期和JOptionPane

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

public class vaildDate { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 


    int month, day, year; 

    String userInput = JOptionPane.showInputDialog("Enter a valid date in mm/dd/yyyy format: "); 
    String [] date = userInput.split("/"); 
    String mm = date[0]; 
    String dd = date [1]; 
    String yyyy = date [2]; 
    month = Integer.parseInt(mm); 
    day = Integer.parseInt(dd); 
    year = Integer.parseInt(yyyy); 
    System.out.println(mm+dd+yyyy); 



    boolean validLeapYear; 
    boolean validDate; 
    if(month>=1 && month <=12&& day>=1 && day<=31) 
    { 

     if(month == 4 || month == 9 || month == 6 || month == 11 && day <= 30) 
     { 
      validDate = true; 
     } 

     if((month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 11 || month == 12) && (day <= 31)) 
     { 
      validDate = true; 
     } 
     else{ 
      validDate =false; 

     } 

     if((year % 400 == 0) || (year % 4 == 0) && (year % 100 != 0)) 
     { 

      validLeapYear = true; 

     } 
     if ((month == 2 && day == 29) && (validLeapYear = false)) 
     { 
      validDate = false; 
     } 
     if((month == 2 && day <= 29) && (validLeapYear = true)) 
     { 
      validDate = true; 
     } 


     if(validDate = true) 
     { 
      JOptionPane.showMessageDialog(null, month +"/"+day+"/"+year+" is a valid date"); 
     } 

     else if(validDate = false) { 
      JOptionPane.showMessageDialog(null,"Your date is invalid"); 
     } 
    } 
    } 
    } 

回答

2

而不是等於booleans您正在分配返回您的分配結果的值。

例如:

if (validDate = true) 

上面的語句將返回true。相反,在所有布爾檢查中,只需按原樣驗證boolean值。

if (validDate) 

要刪除的編譯器錯誤,就可以初始化你2個boolean瓦爾至false

你改變了代碼看起來是這樣的:

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    int month, day, year; 

    String userInput = JOptionPane 
      .showInputDialog("Enter a valid date in mm/dd/yyyy format: "); 
    String[] date = userInput.split("/"); 
    String mm = date[0]; 
    String dd = date[1]; 
    String yyyy = date[2]; 
    month = Integer.parseInt(mm); 
    day = Integer.parseInt(dd); 
    year = Integer.parseInt(yyyy); 
    System.out.println(mm + dd + yyyy); 

    boolean validLeapYear = false; 
    boolean validDate = false; 

    if (month >= 1 && month <= 12 && day >= 1 && day <= 31) { 

     if (month == 4 || month == 9 || month == 6 || month == 11 
       && day <= 30) { 

      validDate = true; 
     } 

     if ((month == 1 || month == 3 || month == 5 || month == 7 
       || month == 8 || month == 11 || month == 12) 
       && (day <= 31)) { 
      validDate = true; 

     } else { 

      validDate = false; 

     } 

     if ((year % 400 == 0) || (year % 4 == 0) && (year % 100 != 0)) { 

      validLeapYear = true; 

     } 
     if ((month == 2 && day == 29) && (!validLeapYear)) { 

      validDate = false; 
     } 
     if ((month == 2 && day <= 29) && (validLeapYear)) { 

      validDate = true; 
     } 

     if (validDate) { 

      JOptionPane.showMessageDialog(null, month + "/" + day + "/" 
        + year + " is a valid date"); 
     } 

     else if (!validDate) { 
      JOptionPane.showMessageDialog(null, "Your date is invalid"); 
     } 
    } 
} 
1

在谷歌快速搜索顯示有更容易的方法來驗證日期。請參閱本之一:

http://www.mkyong.com/java/how-to-check-if-date-is-valid-in-java/

它使用的日期解析和捕捉異常,如果日期是無效的(無法解析)。

如果你想堅持你的算法,我建議使用像Eclipse這樣的IDE和一步一步調試,同時保持你的變量的值。你顯然有一個算法問題,這在調試時會變得很明顯。

希望有所幫助。

+0

感謝您的幫助。 – HatTrick

+0

如果它適合您的需求,請接受我的答案。 –