为什么我的日期验证代码不起作用?

时间:2017-02-26 04:08:59

标签: java date

我的代码没有返回任何值,我不知道为什么。我的任务要求我编写一个接受mm / dd / yyyy格式的日期的代码,我需要把闰年放进去。问题是,我没有收到任何输入。我是业余广告,我不知道有什么不对。我也允许使用案例陈述,但我不确定如何实施案例。

import java.util.Scanner;
public class Question1 {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in).useDelimiter("/");
        System.out.println("Please enter a date in mm/dd/yyyy format: ");
        String mm = sc.next();
        String dd = sc.next();
        String yyyy = sc.next();
        int month = Integer.parseInt(mm);
        int day = Integer.parseInt(dd);
        int year = Integer.parseInt(yyyy);

        if (month <= 0 || month>12)
        {
            System.out.println("invalid month ");
        }
        if (year%4 != 0 || month == 02 || day >= 29)
        {
           System.out.println("invalid date");
        } 
        if (month == 4 || month == 6 || month == 9 || month == 11 || day >= 31)
        {
           System.out.println("Invalid day");
        }
        if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12 || day >=32 )
        {
           System.out.println("Invalid day");
        }
        else
        {
           System.out.println("Valid date");
        }  
    }
}

4 个答案:

答案 0 :(得分:2)

代码将分隔符设置为/。然后输入12/25/2016之类的内容。第一个sc.next()调用得到12.第二个得到25个。第三个......等待,因为它没有看到另一个/所以它不了解你&# 39;完成。如果您使用当前代码键入12/25/2016/,则至少会提供输出,即使该输出尚不正确。

答案 1 :(得分:0)

你想使用switch case然后通过以下代码:

import java.util.Scanner;
public class Question1 {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in).useDelimiter("/");

        System.out.println("Please enter a date in mm/dd/yyyy/ format: ");
        String mm = sc.next();
        String dd = sc.next();
        String yyyy = sc.next();
        int month = Integer.parseInt(mm);
        int day = Integer.parseInt(dd);
        int year = Integer.parseInt(yyyy);
        boolean valid = isValidDate(day,month,year);
        if (valid == true)
        {
            System.out.println("Date is Valid");
        }
        else
        {
            System.out.println("Date is InValid");
        }
    }
    public static boolean isValidDate(int day, int month ,int year)
    {   
        boolean monthOk = (month >= 1) && (month <= 12);
        boolean dayOk = (day >= 1) && (day <= daysInMonth(year, month));

        return (monthOk && dayOk);
    }
    private static int daysInMonth(int year, int month) {
        int daysInMonth;

    switch (month) {
    case 1: 
    case 3: 
    case 5: 
    case 7: 
    case 8: 
    case 10: // go through
    case 12:
        daysInMonth = 31;
        break;
    case 2:
        if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
            daysInMonth = 29;
        } else {
            daysInMonth = 28;
        }
        break;
    default:
        // returns 30 even for nonexistant months 
        daysInMonth = 30;
    }
    return daysInMonth;
  }    

}

输入 12/25/2016 / ,而不是 2016年12月25日

答案 2 :(得分:0)

这是让你入门的东西:

    final String DELIMITER = "/";
    Scanner sc = new Scanner(System.in);
    System.out.println("Please enter a date in mm/dd/yyyy format:\n ");

    String date = sc.next();
    sc.close();

    String[] dateParts = date.split(DELIMITER);
    //check : if dateParts size is not 3 ....something is wrong

    String mm = dateParts[0];
    String dd = dateParts[1];
    String yyyy = dateParts[2];

    System.out.println(mm+" "+ dd +" "+ yyyy);

答案 3 :(得分:-1)

看来你把别人放错了地方。假设您的第二个条件正确且所有其他条件都是错误的,那么您的程序也会将其显示为有效日期,而另一方则相同。 例如,假设任何日期的日期为30,那么它将满足第二个条件,它将显示“无效日期”。

You should write if else as follows.
If{
     If{
          If{
            }
       }
}else{
}  

所有if必须是嵌套的if和then。你的if else序列是错误的。