我坚持使用此代码。 问题是
编写一个从键盘读取字符串的程序,并测试它是否包含有效日期。显示指示其是否有效的日期和消息。如果它无效,还会显示一条消息,说明它无效的原因。
输入日期的格式为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.");
}
}
答案 0 :(得分:3)
我在几秒钟内找到了这个:http://www.javadb.com/check-if-a-string-is-a-valid-date
您的问题是您没有将“日期”字符串放入“mm dd yy”变量中。您的变量永远不会分配任何内容。
答案 1 :(得分:1)
你的想法很不错 - 你可以把它分解成简单的步骤:
显而易见的问题在于步骤#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);
}
}
}