Java 整数输入不接受两位数字符串-布尔值无效
我不知道为什么控制台扫描器不接受两位数形式的月份,比如10、11、12。只接受一位数 我对年份和日期有相同的提示和布尔验证方法,它们工作正常Java 整数输入不接受两位数字符串-布尔值无效,java,Java,我不知道为什么控制台扫描器不接受两位数形式的月份,比如10、11、12。只接受一位数 我对年份和日期有相同的提示和布尔验证方法,它们工作正常 private int promptForMonth() { String monthResponse = ""; int month = -1; do { System.out.println("\t" + "Please enter the month numb
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个问题:
拒绝任何一位数字,意味着您的方法将拒绝数字1-9如果(!(month.length()==2))
- 循环不检查第一个字符,接受负数,如-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。这就是为什么我说“不是真正的解决方案”。