我的代码没有返回任何值,我不知道为什么。我的任务要求我编写一个接受mm / dd / yyyy格式的日期的代码,我需要把闰年放进去。问题是,我没有收到任何输入。我是业余广告,我不知道有什么不对。我也允许使用案例陈述,但我不确定如何实施案例。
import java.util.Scanner;
public class Question1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in).useDelimiter("/");
System.out.println("Please enter a date in mm/dd/yyyy format: ");
String mm = sc.next();
String dd = sc.next();
String yyyy = sc.next();
int month = Integer.parseInt(mm);
int day = Integer.parseInt(dd);
int year = Integer.parseInt(yyyy);
if (month <= 0 || month>12)
{
System.out.println("invalid month ");
}
if (year%4 != 0 || month == 02 || day >= 29)
{
System.out.println("invalid date");
}
if (month == 4 || month == 6 || month == 9 || month == 11 || day >= 31)
{
System.out.println("Invalid day");
}
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12 || day >=32 )
{
System.out.println("Invalid day");
}
else
{
System.out.println("Valid date");
}
}
}
答案 0 :(得分:2)
代码将分隔符设置为/
。然后输入12/25/2016
之类的内容。第一个sc.next()
调用得到12.第二个得到25个。第三个......等待,因为它没有看到另一个/
所以它不了解你&# 39;完成。如果您使用当前代码键入12/25/2016/
,则至少会提供输出,即使该输出尚不正确。
答案 1 :(得分:0)
你想使用switch case然后通过以下代码:
import java.util.Scanner;
public class Question1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in).useDelimiter("/");
System.out.println("Please enter a date in mm/dd/yyyy/ format: ");
String mm = sc.next();
String dd = sc.next();
String yyyy = sc.next();
int month = Integer.parseInt(mm);
int day = Integer.parseInt(dd);
int year = Integer.parseInt(yyyy);
boolean valid = isValidDate(day,month,year);
if (valid == true)
{
System.out.println("Date is Valid");
}
else
{
System.out.println("Date is InValid");
}
}
public static boolean isValidDate(int day, int month ,int year)
{
boolean monthOk = (month >= 1) && (month <= 12);
boolean dayOk = (day >= 1) && (day <= daysInMonth(year, month));
return (monthOk && dayOk);
}
private static int daysInMonth(int year, int month) {
int daysInMonth;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10: // go through
case 12:
daysInMonth = 31;
break;
case 2:
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
daysInMonth = 29;
} else {
daysInMonth = 28;
}
break;
default:
// returns 30 even for nonexistant months
daysInMonth = 30;
}
return daysInMonth;
}
}
输入 12/25/2016 / ,而不是 2016年12月25日。
答案 2 :(得分:0)
这是让你入门的东西:
final String DELIMITER = "/";
Scanner sc = new Scanner(System.in);
System.out.println("Please enter a date in mm/dd/yyyy format:\n ");
String date = sc.next();
sc.close();
String[] dateParts = date.split(DELIMITER);
//check : if dateParts size is not 3 ....something is wrong
String mm = dateParts[0];
String dd = dateParts[1];
String yyyy = dateParts[2];
System.out.println(mm+" "+ dd +" "+ yyyy);
答案 3 :(得分:-1)
看来你把别人放错了地方。假设您的第二个条件正确且所有其他条件都是错误的,那么您的程序也会将其显示为有效日期,而另一方则相同。 例如,假设任何日期的日期为30,那么它将满足第二个条件,它将显示“无效日期”。
You should write if else as follows.
If{
If{
If{
}
}
}else{
}
所有if必须是嵌套的if和then。你的if else序列是错误的。