Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我没有收到正确的回信?_Java - Fatal编程技术网

Java 为什么我没有收到正确的回信?

Java 为什么我没有收到正确的回信?,java,Java,下面我有一段代码,我不会使用。我在主方法中获取输入,然后将该输入传递到另一个方法中以检查验证。但它并没有真正正确地检查。如果我输入99的月份和日期,我希望它给我的消息检查月份 相反,我得到: 这 这个 如果我为月份输入02,为天输入99,我希望它会给我消息:Check day。相反,我得到了这个 如果我为这两个方法都输入02,我希望它运行并继续运行其他方法。相反,我得到了这个 这个月==01不是比较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");
}