English 中文(简体)
不能阅读和验证标准投入的适当日期
原标题:Cannot read and validate proper dates from standard input
  • 时间:2011-10-11 03:08:26
  •  标签:
  • java

I am stuck on this code . The problem says

起草一个方案,说明从键盘中提取的线索,并测试是否载有有效日期。 显示日期和电文,表明该日期是否有效。 如果无效,也发出信息,解释其无效的原因。

输入日期将具有格式毫米/dd/yyyy。 有效月值为1至12个月(1月为1)。 日值从1美元到一定数值。 9月、4月、6月和11月各有30天。 2月份为28天,但只有29岁这一代位的年份除外。 其余几个月各有31天。 年限为4年,但除400年外,每年不得有100年。

这是我迄今为止所写的。 问题是,无论我提出的日期如何,产出总是一样的。 你们能否帮助我找到问题?

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.");

            }
}
问题回答

I found this within seconds: http://www.javadb.com/check-if-a-string-is-a-valid-date

您的问题是,你没有将“日期”重新纳入你的“mm dd yy”变量。 你们的变量从未被分配到任何东西。

你们有理智的开端——你可以把这个开端 break为容易的步骤:

  1. Read input for month/day/year off the input stream (standard input, in this case)
  2. ???
  3. Check the validity of those inputs (leap year, valid day, etc)

问题显然在于第2步。 你们想要做的是,在你创建的<条码>不同领域获得日、月和年。 现在,你将标准投入的全部投入视为单一项目,然后检查总价值为零的日、月和年值。

它可以有助于避免对目前输入格式的exact表示担忧,而只是读到标准输入的int<>t数值。 斯堪纳有一套检查特定类型的方法,包括<代码>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...
...

因此,你可以核实,至少你的逻辑是正常运转的,即使你以适当格式阅读日期的代码没有完全正确。 确保你的逻辑和性质的东西是第一步。

在采取这一步骤之后,另一个有益的想法是考虑从关键板上得出的日期:delimits(或,将每一部分投入分开)。 通知格式载于mm/dd/yyyyyy。 每一个人<代码>int 价值与特性分开。 我将围绕<代码>Scanner,看看它如何能够帮助你阅读不同格式的投入。

public class JavaApplication4 { static int mm=00; static int dd=00; static int yyyy=0000; public static 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);
            }
         }
    }




相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签