Java 为什么我没有收到正确的回信?
下面我有一段代码,我不会使用。我在主方法中获取输入,然后将该输入传递到另一个方法中以检查验证。但它并没有真正正确地检查。如果我输入99的月份和日期,我希望它给我的消息检查月份 相反,我得到: 这 这个 如果我为月份输入02,为天输入99,我希望它会给我消息:Check day。相反,我得到了这个 如果我为这两个方法都输入02,我希望它运行并继续运行其他方法。相反,我得到了这个 这个月==01不是比较Java中字符串的正确方法 您正在尝试比较两个变量的内存位置,这两个变量可能不相等Java 为什么我没有收到正确的回信?,java,Java,下面我有一段代码,我不会使用。我在主方法中获取输入,然后将该输入传递到另一个方法中以检查验证。但它并没有真正正确地检查。如果我输入99的月份和日期,我希望它给我的消息检查月份 相反,我得到: 这 这个 如果我为月份输入02,为天输入99,我希望它会给我消息:Check day。相反,我得到了这个 如果我为这两个方法都输入02,我希望它运行并继续运行其他方法。相反,我得到了这个 这个月==01不是比较Java中字符串的正确方法 您正在尝试比较两个变量的内存位置,这两个变量可能不相等 相反,您应该使
相反,您应该使用month.equals01。您应该使用equals方法来比较字符串。使用==运算符时,比较字符串的地址,而不是其内容。当回答解释其当前不起作用的原因时-使用==而不是equals-我建议您不要开始使用equals 相反,首先将用户输入解析为数字,然后验证这些数字。。。使用数字而不是字符串进行数字比较要容易得多。比如:
private boolean isValidDate(int year, int month, int day) {
// Adjust for whatever bounds you want
if (year < 1900 || year > 2100) {
System.out.println("Check year");
return false;
}
if (month < 1 || month > 12) {
System.out.println("Check month");
return false;
}
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(year, month - 1, 1);
if (day < 1 || day > calendar.getActualMaximum(Calendar.DAY_OF_MONTH)) {
System.out.println("Check day");
return false;
}
calendar.set(Calendar.DAY_OF_MONTH, day);
// Store calendar somewhere if you want...
return true;
}
现在,我给出的代码已经检查了所有内容并构建了一个日历——不清楚if块中的方法要做什么。但是你不需要第二次打电话给isValidDate。你只需要:
// Assuming you're using my new method...
if (isValidDate(year, month, day)) {
// Do whatever you need to do
} else {
System.out.println("Invalid input");
}
将字符串转换为整数,然后检查是否使用int-monthVal=integer.parseIntmonth,这样会更高效、更容易读/写/测试;然后,您可以检查a是否正确解析了它,并在其周围使用try/catch,b使用if monthVal>0和&monthVal<13{/*month是好的*/}测试值。有两个大错误 您正在将字符串与equals进行比较,equals将比较内存而不是内容 ifmonth==01行应为if01.equalsmonth 如果main.isValidDatemonth,day,year==true,则检查有效日期的条件应与如果main.isValidDatemonth,day,year类似
o。derp.>。<谢谢,我完全忘了!正如Jon所写的,如果月份==一月,你应该声明常量并用这种方式比较。这更清楚。如果我输入了错误的月份,它会打印两次Check month!这是为什么?@ResidengPlace:现在你给isValidDate打了两次电话。不要那样做。我不知道我该怎么做才能不那样做。。。有什么帮助吗;x@DwellingPlace:查看我的编辑。我可以使用其中的| |吗?例如month.equals01 | | | 02 | | 03 |@住所号。事实上,JonSkeet给了你一个非常好的建议。如果您可以首先将值解析为int值,那么您可以在month>=1&&month时比较范围。我去看看!谢谢:我明白了!我还能以同样的方式返回吗?当然可以,谢谢!我会换的祝你好运。请回来接受其中一个答案,当你有它的工作:
if (main.isValidDate(month, day, year) == true)
{
main.newFormat(month, day, year);
main.isLeapYear(year);
main.dayNumber(month, day);
}
else if (main.isValidDate(month, day, year) == false)
{
System.out.println("Invalid Input");
}
// Assuming you're using my new method...
if (isValidDate(year, month, day)) {
// Do whatever you need to do
} else {
System.out.println("Invalid input");
}