compareTo不能应用于java.util.Date(java)

compareTo不能应用于java.util.Date(java),java,compareto,Java,Compareto,我正在用Java编写预约程序,遇到如下错误: AppointNew.java:68:未报告的异常java.text.ParseException;必须被抓住或宣布被抛出 Date lowDate=sdf.parsestdin.nextLine; ^ AppointNew.java:70:未报告的异常java.text.ParseException;必须被抓住或宣布被抛出 Date highDate=sdf.parsestdin.nextLine; ^ AppointNew.java:77:未报告

我正在用Java编写预约程序,遇到如下错误:

AppointNew.java:68:未报告的异常java.text.ParseException;必须被抓住或宣布被抛出 Date lowDate=sdf.parsestdin.nextLine; ^ AppointNew.java:70:未报告的异常java.text.ParseException;必须被抓住或宣布被抛出 Date highDate=sdf.parsestdin.nextLine; ^ AppointNew.java:77:未报告的异常java.text.ParseException;必须被抓住或宣布被抛出 Date newCurrentDate=sdf.parsecurrentDate; 假设此程序允许用户进行新约会,当用户进行新约会时,他们可以输入日期和说明,可以任意多次输入,然后他们可以选择一系列日期供程序打印。假设用户在提供的日期范围内打印约会。这就是我出错的地方

以下是我的代码:

导入java.util.*; 导入java.text.simpleDataFormat; 导入java.util.Date; 公共班级任命新 { 公共静态无效主字符串[]args { ArrayList=新的ArrayList; Scanner stdin=新ScannerSystem.in; 字符串选择=; int-choiceNum=0; 字符串日期=; 字符串描述符=; int类型=0; 字符串类型选择=; System.out.println欢迎使用预约应用!\n; System.out.println\t===============================================================; 做 { System.out.print\n\t选择1:新建,2:打印范围,3:全部打印,4:退出; choice=stdin.nextLine; choiceNum=Integer.parseIntchoice; 如果choiceNum==1 { System.out.print\n\n\t输入新约会日期,格式为mm/dd/yyyy:; 日期=stdin.nextLine; System.out.print\n\n\t输入新约会说明:; descripp=stdin.nextLine; System.out.print\n\n\t输入1=一次,2=每日,3=每月:; 类型=stdin.nextInt; stdin.nextLine; 如果类型==1 { Once Once=新Oncedate,描述; 类型选择=一次; } 如果type==2,则为else { 每日=新的每日日期,描述; 类型选择=每日; } 其他的 { 每月=新的月份,描述; 类型选择=每月; } 字符串stringToAdd=; stringToAdd=日期+:\+描述+\,+类型选择; list.addstringToAdd; System.out.println\n\n\t新建+类型选择+添加约会+日期+\n; System.out.println\t===================================================\n; } 如果choiceNum==2 { System.out.print\n\n\t开始日期,格式为mm/dd/yyyy:; SimpleDataFormat sdf=新SimpleDataFormatMM/dd/yyyy; Date lowDate=sdf.parsestdin.nextLine; System.out.print\n\n\t结束日期,格式为mm/dd/yyyy:; Date highDate=sdf.parsestdin.nextLine; forint i=0;i如果newCurrentDate.compareTowDate>=0&&newCurrentDate.compareTowDate,问题是您试图将字符串与日期进行比较。这到底是什么意思

您应该将字符串转换为日期,例如使用SimpleDateFormat,或者理想情况下使用,然后将两个值作为同一类型进行比较

编辑:如评论中所述,这也不是您想要的:

SimpleDateFormat sdf = new SimpleDateFormat("mm/dd/yyyy");
mm以SimpleDateFormat表示分钟,而不是月。您希望改为mm/dd/yyyy。有关详细信息,请参阅

currentDate.compareTo(lowDate)
currentDate是字符串,lowDate是日期。您正在尝试比较两个不同的内容


将currentDate转换为日期对象,然后调用compareTo;

这是正常情况,您可以将日期类型的对象与字符串进行比较。将字符串转换为使用SimpleDataFormat或其他格式的日期,您将能够比较这两个对象

Date correctCurrentDate = sdf.parse(currentDate);
为了避免在测试程序中添加try/catch,我通常编写如下主要方法:

public static void main (String[] args) throws Exception

当然,对于在生产环境中运行的程序,您应该使用try/catch来处理异常。但是对于测试程序来说,这很烦人。

Apples and Oranges…Date currentDate=sdf.parsecurrentDateString;也可以吗?我刚刚编辑了我的代码,并添加了我现在收到的新错误……有什么建议吗?@user2213611:将您的代码放进去try/catch块或declare抛出方法语法。异常消息非常清楚。您能提供try/catch块的一些示例吗?我以前从未做过这些示例。实际上,我对java相当陌生。Date currentDate=sdf.parsecurrentDateString;是否有效?@user2213611:是-尽管您的SimpleDateFormat模式是incorr
您希望在MM/dd/yyyy时使用ect-MM表示分钟,而不是月。不过我还是建议使用Joda Time。我只是编辑了我的代码并添加了我现在遇到的新错误。。。。有什么建议吗?@user2213611:Stack Overflow不是交互式调试工具。看看这些错误,试着理解它们的意思。如果您目前不知道异常,请阅读有关异常的教程。然后计算出你想对异常做什么。请注意,通过更改问题,您已使所有答案看起来非常奇怪。我建议你将问题恢复到以前的形式,做一些研究,如果你仍然不知道该做什么,问一个新问题。我刚刚编辑了我的代码并添加了我现在遇到的新错误。。。。有什么建议吗?是的,添加一个try/catch块或抛出异常:主字符串[]args throws Exception我刚刚尝试了这两种方法,但仍然无法使其正常工作。您能提供一个try/catch块的示例以及它在我的代码中的位置吗?这就是我所做的尝试{Date lowDate=sdf.parsestdin.nextLine;}catchParseException e{}。