当前位置: 首页 > 知识库问答 >
问题:

从扫描仪获取输入并确定有效日期

端木冷勋
2023-03-14

我知道我可以使用日期格式化程序,但我正在努力学习。

我正在尝试以mm/dd/yyyy的格式从Scanner中获取日期。当我输入月份时,我遇到了麻烦。例如,如果我想要一月,我按01,monthInt将其转换为1而不是01

我的一天也有麻烦。当我输入有效日期时,它一直说无效日。我的 if 语句是否搞砸了?如果你需要更多的解释,就问。感谢您抽出宝贵时间接受采访!

我的代码:

    System.out.println("Enter a date in the format mm/dd/yyyy");
    String mm;
    String dd;
    String yyyy;
    String January = null;
    String February = null;
    String March = null;
    String April = null;
    String May = null;
    String June = null;
    String July = null;
    String August = null;
    String September = null;
    String October = null;
    String November = null;
    String December = null;
    String month = null;
    String date = null;

    Scanner keyboard = new Scanner(System.in);

    date = keyboard.next();
    if (date.length() != 10) {
        System.out.println("Format of date is wrong");
    }
    if (date.charAt(2) != '/') {
        System.out.println("Must have / after mm");
    }
    if (date.charAt(5) != '/') {
        System.out.println("Must have / after dd");
    }

    else if (date.length() == 10 && date.charAt(2) != '/' && date.charAt(5) != '/') {
        System.out.println(date + " date is valid");
    }

    mm = date.substring(0, 1);
    int monthInt = Integer.parseInt(mm);        

    if (monthInt == 1) {
        month = January;
    } else if (monthInt == 2) {
        month = February;
    } else if (monthInt == 3) {
        month = March;
    } else if (monthInt == 4) {
        month = April;
    } else if (monthInt == 5) {
        month = May;
    } else if (monthInt == 6) {
        month = June;
    } else if (monthInt == 7) {
        month = July;
    } else if (monthInt == 8) {
        month = August;
    } else if (monthInt == 9) {
        month = September;
    } else if (monthInt == 10) {
        month = October;
    } else if (monthInt == 11) {
        month = November;
    } else if (monthInt == 12) {
        month = December;
    } else {
        System.out.println("Invalid Month");
    }

    if (monthInt < 0 || monthInt > 12) {
        System.out.println("Invalid month");
    }

    dd = date.substring(3, 4);
    int dayInt = Integer.parseInt(dd);

    if (monthInt == 1 || monthInt == 3 || monthInt == 5 || monthInt == 7 || monthInt == 8 || monthInt == 10
            || monthInt == 12 && dayInt < 0 && dayInt > 31) {
        System.out.println("Invalid day");
    }

    if (monthInt == 4 || monthInt == 6 || monthInt == 9 || monthInt == 11 
             && dayInt < 0 && dayInt > 30) {
        System.out.println("Invalid day");

    }
    if (monthInt == 2 && dayInt < 0 && dayInt > 28){
        System.out.println("Invalid day");
    }

共有2个答案

宗政德宇
2023-03-14
匿名用户

看起来问题就在这里:

< code>mm = date.substring(0,1);

它从日期字符串中获取第一个字符,因此,如果您为1月输入“01”,它将采用“0”,因此moneInt将为0,您将收到“无效月份”错误。如果你想得到两个字符,你需要mm = date.substring(0, 2);

date也存在同样的问题,你需要 dd = date.substring(3, 5);

鲁淇
2023-03-14

您在无效日支票上的 if 语句不正确。它应该看起来像这样:

if ((monthInt == 1 || monthInt == 3 || monthInt == 5 || monthInt == 7 || monthInt == 8 || monthInt == 10 || monthInt == 12) && (dayInt <= 0 || dayInt > 31)) {
    System.out.println("Invalid day");
}

if ((monthInt == 4 || monthInt == 6 || monthInt == 9 || monthInt == 11) && (dayInt <= 0 || dayInt > 30)) {
    System.out.println("Invalid day");
}

if (monthInt == 2 && (dayInt <= 0 || dayInt > 28)) {
    System.out.println("Invalid day");
}

请注意,dayInt

这里的关键是,如果它是给定的月份之一,并且它在该月的日期范围之外,您希望它是无效的一天。因此,您使用if(month1 OR month2 etc)AND(outsiderange1 OR outsiderange2)形式的复合if。

 类似资料:
  • 问题内容: 我试图找到一种方法来从键盘输入。 我尝试使用: 该方法不存在。 我尝试了作为。但是,它并不总是在每种情况下都可行,因为我从我的方法中调用的另一个方法需要作为输入。因此,我必须找到一种显式将char作为输入的方法。 有什么帮助吗? 问题答案: 你可以从中提取第一个字符: 消耗正好一个字符,你可以使用: 要严格使用一个字符,可以使用:

  • 问题内容: 我正在尝试让扫描仪在循环中进行输入。一旦用户想要完成操作,他就可以退出此循环。我尝试了许多不同的方法来执行此操作,但始终存在一些问题。这是代码: 上面代码的问题(在我尝试的其他方法上也会发生)是,当用户键入 Y时 ,将跳过名字的第一个输入,并跳转到姓氏。如果用户键入 N, 则循环将正确停止。有人可以解释发生这种情况的原因,以及如何克服使用课堂的问题? ps:执行类似的操作,将导致循环终

  • 问题内容: 我正在尝试做的是拥有多个具有不同变量的输入。每个变量将是不同方程式的一部分。我正在寻找一种方法来做,我想我有一个主意。我只想知道这是否合法,也许还有更好的方法。 问题答案: 如果每个输入都问相同的问题,则应使用循环和输入数组: 或者如Chip所建议的,您可以从一行中解析输入: 您在正确的轨道上,所做的工作正常。这只是一种更好,更灵活的处理方式。

  • 对于作业,我必须编写以下代码: 当我尝试编译它时,它在命令提示符下给了我3个错误,说“无法解析符号,符号:类扫描仪,位置:类单词,扫描仪用户输入=新扫描仪(System.in)”。我不确定错误在哪里。我应该使用BufferedReader作为输入吗?

  • 为此,我创建了一个名为的单例。这个类处理所有的输入阅读内容。我创建了一个名为的方法,它将回调作为参数。在这个方法中,我创建了一个新线程,并在其中等待使用的输入。这个类还有方法,它向上面描述的线程发送中断消息。下面是该类的当前实现: 这个代码极不可靠。我一会儿就告诉你我的意思。我制作了一个名为Client的玩具类,在中,我用计时器模拟了消息收入。 以下是它的工作原理: 我知道这个问题非常长(也许是不

  • 我对编程相当陌生。目前我正在做一个uni项目,用java创建一个基本的文本游戏。我遇到的问题是,如何实现一个不允许用户输入相同名称的业务规则。我把它设置好了,这样扫描仪就可以读取阵列了。我使用的是Java,这是我第一次使用这个论坛,所以我非常感谢大家提供的帮助,并提前感谢大家!:) 并为糟糕的格式道歉,我不知道如何正确发布。