无法从标准输入中读取和验证正确的日期

时间:2011-10-11 03:08:26

标签: java

我坚持使用此代码。 问题是

  

编写一个从键盘读取字符串的程序,并测试它是否包含有效日期。显示指示其是否有效的日期和消息。如果它无效,还会显示一条消息,说明它无效的原因。

     

输入日期的格式为mm / dd / yyyy。有效月份值mm必须为1到12(1月为1)。日值dd必须从1到适合给定蛾的值。 9月,4月,6月和11月各有30天。 2月有28天,除了闰年有29天。剩下的几个月都有31天。闰年是任何可被4整除但不能被100整除的年份,除非它也可以被400整除。

这是我到目前为止编写的代码。问题是,无论我输入什么日期,输出总是相同的。你能帮我找到问题吗?

import java.util.Scanner;

public class Ch3ProblemNine

{

public static void main(String [ ] args)

{
      System.out.println("Enter the date in mm/dd/yyyy format. ");
    String date="";

       Scanner keyboard = new Scanner(System.in);

    int mm = 00;

    int dd = 00;

    int yy = 0000;

    date = keyboard.nextLine();

    boolean isLeapYear;
    mm=0;
    dd=0;
    yy=0;
    isLeapYear=false;
    if(yy%4==0 && (!(yy%100==0) || yy%400==0))
    {
    isLeapYear=true;
    }

    if((mm<12) && (mm>1))
      {
       System.out.println("You have entered an invalid month. Please try again.");
      }

      if((dd>31 && dd<1))
      {
       System.out.println("You have entered an invalid day. Please try again.");
      }

      if((mm==9 && mm==4 && mm==6 && mm==11) && !(dd==31))
      {
       System.out.println("For the given month, you have entered an invalid day.");
      }
      if((mm==2 && !(dd<29)) && isLeapYear==false)
      {
        System.out.println("You have entered an invalid day for the month of February.");
      }
      if((mm==2 && !(dd<30)) && isLeapYear==true)
      {
       System.out.println("You have entered an invalid day for the month of February.");
      }
      else
      {
       System.out.println("You have entered a valid date in the correct format.");


            }


           if (isLeapYear){
           if((mm==2 && !(dd==29)) && isLeapYear==true)
            System.out.println(date + " is a valid date.");
           }
           else
               System.out.println( date + "is not valid month must have 29 days or less.");
            if ((mm ==2) && (dd<=28))
                System.out.println( date + "  is a valid date.");

            }
}

3 个答案:

答案 0 :(得分:3)

我在几秒钟内找到了这个:http://www.javadb.com/check-if-a-string-is-a-valid-date

您的问题是您没有将“日期”字符串放入“mm dd yy”变量中。您的变量永远不会分配任何内容。

答案 1 :(得分:1)

你的想法很不错 - 你可以把它分解成简单的步骤:

  1. 读取输入流的月/日/年输入(在这种情况下为标准输入)
  2. ???
  3. 检查这些输入的有效性(闰年,有效日等)
  4. 显而易见的问题在于步骤#2。您要做的是将日,月和年获取到您创建的不同int字段中。现在,您将标准输入的整个输入读作一行,然后检查始终赋值为零的日,月和年值。

    现在可以避免担心输入的精确格式,而只是从标准输入中读取3 int个值。扫描程序有一套方便的方法可用于检查特定类型,包括hasNextInt()nextInt()。以下是实际操作的示例:

    //Read the (x,y) coordinate pair from stdin
    Scanner keyboard = new Scanner(System.in);
    int x, y
    
    if (keyboard.hasNextInt()) {
        x = keyboard.nextInt();
    }
    
    if (keyboard.hasNextInt()) {
        y = keyboard.nextInt();
    }
    
    //Perform some calculations...
    ...
    

    有了这个,您可以验证至少您的逻辑是否正常工作,即使您以正确格式读取日期的代码不完全正确。确保你的逻辑和这种性质的事情是第一个重要的步骤。

    在该步骤之后,另一个有用的提示是考虑从键盘输入的日期分隔(或者,将输入的每个部分分开)。请注意,格式为 mm / dd / yyyy ,其中每个int值用/字符分隔。我会环顾Scanner,看看它有什么方法可以帮助你阅读不同格式的输入。

答案 2 :(得分:0)

公共类JavaApplication4 {          静态整数mm = 00;          static int dd = 00;          静态整数yyyy = 0000;         公共静态void main(String [] args){

     java.util.Scanner keyboard= new java.util.Scanner(System.in);
     System.out.println("Enter the date in MM/dd/yyyy format. j");

     System.out.println("ادخل قيمة الشهر");
     mm = Integer.parseInt(keyboard.nextLine());
     if(mm>0&&mm<13){
        System.out.println("قيمة الشهر صحيحة");
     }
     else{
        System.out.println("قيمة الشهر غير صحيحة");
        System.out.println("اعد تشغيل البرنامج");
        System.exit(0);
     }
      System.out.println("ادخل قيمةاليوم");
      dd = Integer.parseInt(keyboard.nextLine());
      if(dd>0&&dd<31){
        System.out.println("قيمة اليوم صحيحة");
     }
      else{
        System.out.println("قيمة اليوم غير صحيحة");
        System.out.println("اعد تشغيل البرنامج");
        System.exit(0);
    }

    System.out.println("ادخل قيمة السنة");
    String year =(keyboard.nextLine());
    if(year.length()==4){
    System.out.println("قيمة السنة صحيحة");
    }
    else{
        System.out.println("قيمة السنة غير صحيحة");
        System.out.println("اعد تشغيل البرنامج");
        System.exit(0);
            }
         }
    }