我有问题解决不了。用户被要求输入一个日期,并将其与今天的日期进行比较,如果是在将来,则要求用户再次输入日期。第一次它工作,并告诉用户它是在未来,但当他输入一个有效的日期,它仍然显示重新输入。感谢任何帮助。
System.out.println("Purchase date DD/MM/YYYY:");
String date = sc.nextLine();
SimpleDateFormat dateform = new SimpleDateFormat ("DD/MM/YYYY");
dateform.parse(date);
Date d = new Date();
Date d2 = dateform.parse(date);
while (d2.compareTo(d) > 0 ){
System.out.println("Re-enter");
date = sc.nextLine();
}
consumbles.add(date);
您可以使用一个变量(例如下面代码中的boolean valid
)来跟踪输入是否有效。如果输入无效,则需要回环。对于这种情况,我更喜欢使用do-while
循环,它保证至少执行一次其主体
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws ParseException {
Scanner sc = new Scanner(System.in);
SimpleDateFormat parser = new SimpleDateFormat("d/M/yyyy", Locale.ENGLISH);
Date today = new Date();
boolean valid;
do {
valid = true;
System.out.print("Purchase date DD/MM/YYYY: ");
String strDate = sc.nextLine();
Date date = parser.parse(strDate);
if (date.after(today)) {
System.out.println("The date should not be a future date. Please try again.");
valid = false;
}
} while (!valid);
System.out.println("Thank you! Processing ...");
}
}
运行示例:
Purchase date DD/MM/YYYY: 14/3/2021
The date should not be a future date. Please try again.
Purchase date DD/MM/YYYY: 20/4/2021
The date should not be a future date. Please try again.
Purchase date DD/MM/YYYY: 12/3/2021
Thank you! Processing ...
请注意,java.util
日期时间API及其格式APISimpleDateFormat
已经过时,并且容易出错。建议完全停止使用它们,并切换到现代的日期时间API。
使用现代日期时间API:
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
DateTimeFormatter parser = DateTimeFormatter.ofPattern("d/M/u", Locale.ENGLISH);
LocalDate today = LocalDate.now();
boolean valid;
do {
valid = true;
System.out.print("Purchase date DD/MM/YYYY: ");
String strDate = sc.nextLine();
LocalDate date = LocalDate.parse(strDate, parser);
if (date.isAfter(today)) {
System.out.println("The date should not be a future date. Please try again.");
valid = false;
}
} while (!valid);
System.out.println("Thank you! Processing ...");
}
}
从Trail:Date Time中了解有关现代日期时间API的更多信息。
d
而不是d
。D
用于一年中的某一天。y
而不是y
。y
用于一年的一周。 System.out.println("Purchase date DD/MM/YYYY:");
String date = sc.nextLine();
// Use java.time, the modern Java date and time API, for your date work.
// Use single letters in the format pattern string to allow user
// to enter single digit day and month.
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("d/M/u");
// Use saying variable names (not just d and d2)
LocalDate today = LocalDate.now(ZoneId.systemDefault());
LocalDate dateEntered = LocalDate.parse(date, dateFormatter);
// Using isAfter() for comparison is easier to read then compareTo()
while (dateEntered.isAfter(today)) {
System.out.println("Re-enter");
date = sc.nextLine();
// Parse the new entered date string into dateEntered
dateEntered = LocalDate.parse(date, dateFormatter);
}
System.out.println("You have successfully entered " + dateEntered);
会话示例:
Purchase date DD/MM/YYYY:
15/3/2021
Re-enter
11/3/2021
You have successfully entered 2021-03-11
您的错误是:
SimpleDateFormat
还是现代的DateTimeFormatter
模式,字母都是区分大小写的。大写D
表示一年中的某一天,小写D
表示月份中的某一天。大写字母y
表示周年,仅与周号一起使用。小写y
表示纪元年份。在我的代码中,我使用小写u
表示带符号的年份,这是DateTimeFormatter
D2
分配新值。因此,当您的条件D2.compareTo(d)>0
为true时,无论用户输入多少次不同的日期,它都将保持为true。问题内容: 如果用户到达程序末尾,我希望他们得到一个提示,询问他们是否要重试。如果他们回答是,我想重新运行该程序。 问题答案: 您可以将整个程序放在另一个while循环中,该循环询问用户是否要重试。
我正在为java类的简介做作业,在解释用户需要提供多个输入时遇到了一些困难。问题如下: “要求用户输入一个数字。您应该使用一个输入对话框来进行此输入。请确保将对话框中的字符串转换为实数。程序需要跟踪用户输入的最小数字和输入的最大数字。询问用户是否要输入另一个数字。如果是,请重复此过程。如果不是,请输出用户输入。 当用户想要退出时,该程序在程序的末尾输出最大和最小的数字。 此外,您的程序应该考虑用户
我创建了以下类,用于输入用户的年龄,然后在控制台中显示适当的信息。 运行此程序时,控制台会询问“请输入您的年龄:”
我试图将用户输入转换为datetime值,但它在shell脚本中给出了无效的日期错误 $5用户正在输入2015年12月3日$6用户正在输入00:10:00
我一辈子都找不到在datetime local的输入框中添加秒的位置 现在它要求,我想在部分添加。结果将是: 我正在用PHP/HTML5编码 任何指示都将不胜感激。
我创建了一个jquery DatePicker。我希望用户选择大于或等于当前日期的日期,所以我使用了。这将禁用所有以前的日期。 但是,通过输入字段,用户可以键入上一个日期。如何禁用输入字段而不禁用DatePicker?