【问题标题】:Getting incorrect results with my Date Validation program in Java在 Java 中使用我的日期验证程序得到不正确的结果
【发布时间】:2013-03-08 02:40:51
【问题描述】:

我必须保持程序基本,不要太花哨。这是我的问题: 当我输入日期“2013 年 11 月 31 日”时,它返回“30 天的常规月份的日期输入不正确”。我理解这意味着我的 If/Else 语句和/或布尔表达式的结构存在问题。但是我似乎无法弄清楚问题所在。任何帮助表示赞赏,谢谢。

这是我的程序:

import java.util.Scanner;

public class DateValidation {

public static void main(String[] args) {

    Scanner keyboard = new Scanner(System.in);
    String date;
    System.out.println("Please enter a date in the following format: mm/dd/yyyy ");
    date = keyboard.next();

    int month = Integer.parseInt(date.substring(0, 2));
    int day = Integer.parseInt(date.substring(3, 5));
    int year = Integer.parseInt(date.substring(6, 10));
    boolean isLeapYear = ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0));
    boolean thirtyMonth = (month == 9 || month == 4 || month == 5 || month == 10);
    boolean regMonth = (month == 1 || month == 3 || month == 6 || month == 7 || month == 8 || month == 11 || month == 12);

    if ((month <= 0) || (day <= 0) || (day >= 32)) {
        System.out.println("You entered an incorrect month or day value");
    }
    if ((month == 2) && (isLeapYear == true) && (day > 0) && (day <= 29)) {
        System.out.println("it's a leap year - the date is " + date);
        System.exit(0);
    } else if ((month == 2) && (isLeapYear == false) && (day > 0) && (day <= 28)) {
        System.out.println("it's not a leap year - the date is " + date);
        System.exit(0);
    } else if (month == 2) {
        System.out.println("Your input is invald. Non leap-years only have 28 days");
        System.exit(0);
    }

    if ((thirtyMonth == true) && (day > 0) && (day <= 30)) {
        System.out.println("This is a valid date for a 30 day month  - here is the date " + date);
        System.exit(0);
    } else if ((thirtyMonth == true) && (day < 0) || (day >= 31)) {
        System.out.println("Incorrect day input for a regular month with 30 days");
        System.exit(0);
    }

    if ((regMonth) && (day > 0) && (day <= 31)) {
        System.out.println("This is a valid date for a regular month with 31 days - here is the date " + date);
        System.exit(0);
    } else if ((regMonth) && (day < 0) && (day >= 32)) {
        System.out.println("Incorrect day input for a regular month with 31 days");
        System.exit(0);
    }


}

}

【问题讨论】:

  • 您可能想试试Joda。还有,你为什么要这么做?
  • 不要使用 if(isLeapYear == true),使用 if(isLeapYear)。同样,使用 if(!isLeapYear) 代替 if(isLeapYear == false)
  • 它有助于将值放入输出消息中,例如System.out.println(day + " 30天一个月无效"); System.exit(0);
  • 我才一个月才开始学习 Java,所以感谢您的所有帮助!

标签: java if-statement


【解决方案1】:

4 月、6 月、9 月和 11 月是一个月 30 天

boolean thirtyMonth = (month == 9 || month == 4 || month == 5 || month == 10);

应该是

boolean thirtyMonth = (month == 9 || month == 4 || month == 6 || month == 11);
boolean regMonth = (month == 1 || month == 3 || month == 5 ||month == 7 || month == 8 || month == 10 || month == 12);

【讨论】:

  • 啊,我明白了!我想这就是所谓的“逻辑错误”谢谢
  • @bytebybyte,你也需要看看 Evgeniy Dorofeev 的回答。
【解决方案2】:

改变

    } else if ((thirtyMonth == true) && (day < 0) || (day >= 31)) {

    } else if (thirtyMonth && (day < 0 || day >= 31)) {

【讨论】:

  • 经典 - ||没有包裹在括号中。
猜你喜欢
  • 2022-08-14
  • 2019-08-31
  • 2020-10-03
  • 1970-01-01
  • 1970-01-01
  • 2021-10-11
  • 2017-05-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多