2014-01-28 54 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

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