Java 整数输入不接受两位数字符串-布尔值无效

Java 整数输入不接受两位数字符串-布尔值无效,java,Java,我不知道为什么控制台扫描器不接受两位数形式的月份,比如10、11、12。只接受一位数 我对年份和日期有相同的提示和布尔验证方法,它们工作正常 private int promptForMonth() { String monthResponse = ""; int month = -1; do { System.out.println("\t" + "Please enter the month numb

我不知道为什么控制台扫描器不接受两位数形式的月份,比如10、11、12。只接受一位数

我对年份和日期有相同的提示和布尔验证方法,它们工作正常

private int promptForMonth() {

    String monthResponse = "";
    int month = -1;
    do {
        System.out.println("\t" + "Please enter the month number - "
                + "for example '6':");
        monthResponse = scan.next();
        if (validateMonthString(monthResponse)) {
            month = Integer.parseInt(monthResponse);
        }
    } while (month == -1);
    return month;
}
下面是布尔验证

private boolean validateMonthString(String month) {
    boolean isValid = true;
    if (month.charAt(0) == '0') {
        isValid = false;
        return isValid;
    } else if (!(month.length() == 2)) {
        isValid = false;
        return isValid;
    }
    for (int x = 1; x < month.length(); x++) {
        if (!(month.charAt(x) >= 49 && month.charAt(x) <= 57)) {
            isValid = false;
            return isValid;
        }
    }
    if (Integer.parseInt(month) > 12) {
        isValid = false;
        return isValid;
    }
    return isValid;
}
private boolean validateMonthString(字符串月){
布尔值isValid=true;
如果(月份字符(0)='0'){
isValid=false;
返回有效;
}如果(!(月长()=2)){
isValid=false;
返回有效;
}
对于(int x=1;x=49和月字符(x)12){
isValid=false;
返回有效;
}
返回有效;
}

您的方法中有3个问题:

  • 如果(!(month.length()==2))
    拒绝任何一位数字,意味着您的方法将拒绝数字1-9
  • 循环不检查第一个字符,接受负数,如-1
  • 循环拒绝0,拒绝有效数字10
另外,
isValid=false;return-isValid;
可以很容易地替换为
return-false;

将所有这些组合在一起,将产生以下代码,该代码完全接受数字1到12

private static boolean validateMonthString(String month) {
    if (month.charAt(0) == '0') {
        return false;
    }
    // not actually needed, but improves runtime
    if (month.length() > 2) {
        return false;
    }
    for (int x = 0; x < month.length(); x++) {
        if (!(month.charAt(x) >= '0' && month.charAt(x) <= '9')) {
            return false;
        }
    }
    if (Integer.parseInt(month) > 12) {
        return false;
    }
    return true;
}
private静态布尔validateMonthString(字符串月){
如果(月份字符(0)='0'){
返回false;
}
//实际上不需要,但改进了运行时
如果(月长()>2){
返回false;
}
对于(int x=0;x='0'和月字符(x)12){
返回false;
}
返回true;
}

@Pshemo已更改。抱歉。第二个数字只能是1到9?10月如何?不是真正的解决方案,但
如果(!(month.charAt(x)>=49&&month.charAt(x)='1'&&month.charAt(x)@Pshemo它仍然不接受10、11、12。这就是为什么我说“不是真正的解决方案”。