我还没有编程很长时间,这是我第一次在程序中声明一个方法并在程序中使用这个方法。简单来说,程序让用户输入一个5位数的邮政编码,我创建的方法检查邮政编码只有5个字符,都是数字。当我在程序中使用该方法时,无论我为zipcode输入什么,while语句都会运行,要求我再次输入我的邮政编码。只有在输入不是五个字符的字符串或不包含数字的字符串时才会发生这种情况。但是,现在即使输入了一个实际的邮政编码也会发生这种情况,让我假设这个方法有问题。我试图在问题中尽可能清楚,但如果需要进一步澄清我可以尝试清理,你可以给予的任何信息将不胜感激。这是我的代码:
import java.util.Scanner;
public class BarCode {
public static void main(String[] args) {
String zipcode;
Scanner in = new Scanner(System.in);
System.out.println("Please enter a 5 digit zipcode: ");
zipcode = in.nextLine();
while (checkInput(zipcode) == false) {
System.out.println("You did not enter a 5 digit zipcode: ");
zipcode = in.nextLine();
} // end while
} // ends main
public static boolean checkInput(String zipcode) {
boolean zipcodeLength = true;
boolean zipcodeDigits = true;
if (zipcode.length() != 5) {
zipcodeLength = false;
} // end if statement
for (int i = 0; i <= zipcode.length(); i++) {
if (!Character.isDigit(i)) {
zipcodeDigits = false;
} // end if statement
} // end for statement
if (zipcodeLength == false || zipcodeDigits == false) {
return false;
} // end if statement
else {
return true;
} // end else statement
} // end checkInput
}
答案 0 :(得分:5)
这是你的问题:
if(!Character.isDigit(i))
应该是
if(!Character.isDigit(zipcode.charAt(i)))
答案 1 :(得分:1)
import java.util.Scanner;
public class BarCode{ public static void main(String[] args){
String zipcode;
Scanner in = new Scanner(System.in);
System.out.println("Please enter a 5 digit zipcode: ");
zipcode = in.nextLine();
while (checkInput(zipcode)==false){
System.out.println("You did not enter a 5 digit zipcode: ");
zipcode = in.nextLine();
}
}
public static boolean checkInput(String zipcode){
boolean zipcodeLength = true;
boolean zipcodeDigits = true;
if (zipcode.length() != 5){
zipcodeLength = false;
} // end if statement
for (int i=0; i<zipcode.length();i++){
if(!Character.isDigit(zipcode.charAt(i))){
zipcodeDigits = false;
}
}
return zipcodeLength && zipcodeDigits;
} // end checkInput
}
答案 2 :(得分:0)
您不需要将布尔值false
存储在某个布尔变量中。只要您发现邮政编码无效,就返回。
你应该这样做: -
!Character.isDigit(zipcode.charAt(i))
取代: -
!Character.isDigit(i)
因此,您可以像这样修改您的方法: -
public static boolean checkInput(String zipcode){
if (zipcode.length() != 5){
return false;
}
for ( int i = 0; i < zipcode.length(); i++){
if(!Character.isDigit(zipcode.charAt(i))){
return false;
}
}
return true;
}
此外,您无需执行以下操作: - booleanVar == false
。只需: - !booleanVar
就够了。
答案 3 :(得分:0)
public static boolean checkInput(String zipcode){
if (zipcode.length() != 5){
return false;
}
for ( int i=0; i<zipcode.length();i++){
char charAt = zipcode.charAt(i);
if(!Character.isDigit(charAt)){
return false;
}
}
return true;
}
您需要使用charAt而不是查看i
是否为数字,因为显然它会是。
答案 4 :(得分:0)
有两个问题。
首先,当您需要<=
时,您将前往<
。
第二,您需要检查zipcode.charAt(i)
而不是i
。无论您输入的是哪种邮政编码,检查i
都会检查数字0 - 4(包含您的代码的5位),以获得5位数的邮政编码。
所以这两行成为
for ( int i=0; i<zipcode.length();i++){
if(!Character.isDigit(zipcode.charAt(i))){
或者,我个人会像这样编码这个方法:
public static boolean checkInput(String zipcode){
if(zipcode.length() != 5) return false; // bad length
for(int i = 0; i < zipcode.length(); i++) {
if(!Character.isDigit(zipcode.charAt(i)) // bad digit
return false;
}
return true; // if no bad condition, it's good
}
答案 5 :(得分:0)
while (zipcode.matches("[0-9]{5}"))==false){
System.out.println("You did not enter a 5 digit zipcode: ");
zipcode = in.nextLine();
}
答案 6 :(得分:0)
!Character.isDigit(i)
这对我来说似乎是个错误。 i
的类型为int
:
for (int i = 0; i <= zipcode.length(); i++) {
// ...
}
因此,您没有致电Character.isDigit(char)
,而是致电Character.isDigit(int)
。这两种方法的行为不同:一种处理文本字符,另一种处理数字unicode值。试试这个:
System.out.println("= char '1' =");
System.out.println(Character.isDigit('1')); // true
System.out.println("= int 1 =");
System.out.println(Character.isDigit(1)); // false
System.out.println("= Unicode 31h (49) =");
System.out.println(Character.isDigit('\u0031')); // true
System.out.println("= int 49 =");
System.out.println(Character.isDigit(49)); // true
您将获得以下输出:
= char '1' =
true
= int 1 =
false
= Unicode 31h (49) =
true
= int 49 =
true