【问题标题】:Java: My valid date checker program does not work for leap yearsJava:我的有效日期检查程序不适用于闰年
【发布时间】:2017-05-28 05:37:37
【问题描述】:

目前,我正在编写一个程序,要求用户输入日、月、年。然后程序检查日期是否有效。但是,对于二月,当输入是闰年时,我无法让它输出正确的响应。

import javax.swing.*;

public class ValidDate{

public static void main(String[]args){

    int day,month,year;

    day = Integer.parseInt(JOptionPane.showInputDialog("Enter a day"));
    month = Integer.parseInt(JOptionPane.showInputDialog("Enter a month"));
    year = Integer.parseInt(JOptionPane.showInputDialog("Enter a year"));

    switch(month){  //this statement will check whether or not the days are valid
        case 1:
            if ( day >= 1 && day <= 31 ){
                System.out.println("Date is valid");
            }
            else{
                System.out.println("Date is not valid");
            }
            break;

        case 2:
            if ( day >= 1 && day <= 28 || month % 4 == 0 && day >= 1 && day <= 29 ){   //look at 
                System.out.println("Date is valid");
            }
            else{
                System.out.println("Date is not valid");
            }
        case 3:
            if ( day >= 1 && day <= 31 ){
                System.out.println("Date is valid");
            }
            else{
                System.out.println("Date is not valid");
            }
        case 4:
            if ( day >= 1 && day <= 30 ){
                System.out.println("Date is valid");
            }
            else{
                System.out.println("Date is not valid");
            }
        case 5:
            if ( day >= 1 && day <= 31 ){
                System.out.println("Date is valid");
            }
            else{
                System.out.println("Date is not valid");
            }
        case 6:
            if ( day >= 1 && day <= 30 ){
                System.out.println("Date is valid");
            }
            else{
                System.out.println("Date is not valid");
            }
        case 7:
            if ( day >= 1 && day <= 31 ){
                System.out.println("Date is valid");
            }
            else{
                System.out.println("Date is not valid");
            }
        case 8:
            if ( day >= 1 && day <= 31 ){
                System.out.println("Date is valid");
            }
            else{
                System.out.println("Date is not valid");
            }
        case 9:
            if ( day >= 1 && day <= 30 ){
                System.out.println("Date is valid");
            }
            else{
                System.out.println("Date is not valid");
            }
        case 10:
            if ( day >= 1 && day <= 31 ){
                System.out.println("Date is valid");
            }
            else{
                System.out.println("Date is not valid");
            }
        case 11:
            if ( day >= 1 && day <= 30 ){
                System.out.println("Date is valid");
            }
            else{
                System.out.println("Date is not valid");
            }
        case 12:
            if ( day >= 1 && day <= 31 ){
                System.out.println("Date is valid");
            }
            else{
                System.out.println("Date is not valid");
            }//case ended
        }
    }
}

我输入闰年得到的输出是

Date is not valid
Date is valid
Date is valid
Date is valid
Date is valid
Date is valid
Date is valid

【问题讨论】:

  • 您在大多数情况下都忘记了break;
  • 对于闰年,您正在验证月份 % 4 == 0 ?? , 验证应该在年 ((year % 4 == 0) && (year % 100 != 0)) || (年 % 400 == 0)
  • 完美。谢谢

标签: java date input


【解决方案1】:

变化:

month % 4 == 0

到:

year % 4 == 0

如果您出于学习目的尝试此操作,那很好。否则,您可以使用以下方法验证闰年:

GregorianCalendar gc = new GregorianCalendar();
if (gc.isLeapYear(year)) 

GregorianCalendar

【讨论】:

  • 刚刚更改了月份,不过感谢有关日历类的信息,我会从现在开始尝试使用它
【解决方案2】:

没有

休息;

语句,一旦找到正确的案例,它就会失败并执行下一个案例。除非您正在创建批量案例,否则请添加 break 语句 我所说的散装箱:

enum Day {
  MONDAY,
  TUESDAY,
  WEDNESDAY,
  THURSDAY,
  FRIDAY,
  SATURDAY,
  SUNDAY;

  public boolean isWorkDay() {
    switch(this) {
      case SATURDAY:
      case SUNDAY:
        return false;
      default:
        return true;
    }
  }
}

【讨论】:

  • 我的错 - 仍然适用于做保姆之类的学生。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-14
  • 2017-10-02
  • 1970-01-01
  • 2010-10-08
  • 1970-01-01
  • 2016-11-28
相关资源
最近更新 更多