Java有效日期和JOptionPane

时间:2014-01-28 21:33:52

标签: java validation date if-statement joptionpane

Noob在这里忍受我......我正在开发一个Java程序,它接受来自JoptionPane的用户输入,并使用一组if-else语句来验证日期,同时考虑闰年。我似乎在运行时遇到的问题是它验证了不可能的日期。例如,2014年2月29日,它说这是一个有效的日期,但实际上并非如此。 对这个问题的见解将受到高度赞赏。

 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 个答案:

答案 0 :(得分: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 :(得分:1)

Google快速搜索显示有更简单的方法来验证日期。请看这个:

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

它使用日期解析并在日期无效时捕获异常(无法解析)。

如果你想坚持你的算法,我建议使用像Eclipse这样的IDE和逐步调试,同时看看变量的值。你明显有一个算法问题,这在调试时会很明显。

希望有所帮助。