Java 方法声明
我已经很久没有编程了,这是我第一次在程序中声明一个方法并在程序中使用这个方法。简单地说,程序让用户输入一个5位的zipcode,我创建的方法检查zipcode是否只有5个字符,是否都是数字。当我在程序中使用该方法时,无论我为zipcode输入什么,while语句都会运行,要求我再次输入zipcode。只有当您输入的字符串不是五个字符或字符串只有数字时,才会发生这种情况。然而,现在即使输入了一个实际的zipcode,它也在发生,这让我不得不假设这个方法出了问题。我试图尽可能清楚地回答这个问题,但如果需要进一步澄清,我可以尝试澄清,如果您能提供任何信息,我将不胜感激。这是我的密码:Java 方法声明,java,methods,Java,Methods,我已经很久没有编程了,这是我第一次在程序中声明一个方法并在程序中使用这个方法。简单地说,程序让用户输入一个5位的zipcode,我创建的方法检查zipcode是否只有5个字符,是否都是数字。当我在程序中使用该方法时,无论我为zipcode输入什么,while语句都会运行,要求我再次输入zipcode。只有当您输入的字符串不是五个字符或字符串只有数字时,才会发生这种情况。然而,现在即使输入了一个实际的zipcode,它也在发生,这让我不得不假设这个方法出了问题。我试图尽可能清楚地回答这个问题,但如
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
}
这就是你的问题:
if(!Character.isDigit(i))
应该是
if(!Character.isDigit(zipcode.charAt(i)))
您不需要将布尔值false存储在某个布尔变量中。只要在发现zipcode无效时返回即可 你应该这样做:
!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够了
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,而不是查看我是否是一个数字,因为显然它是一个数字。有两个问题
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
}
首先是你要去
我觉得这是个错误。i为int型:
您将获得以下输出:
= char '1' =
true
= int 1 =
false
= Unicode 31h (49) =
true
= int 49 =
true
仅供参考,你的整个checkInput可以被zipcode.matches\\d{5}替换,代码更少,麻烦更少。你需要学习如何自己调试这些简单的问题。即使没有调试器,您也可以插入System.out.println调用,以了解代码中发生了什么。@HotLicks+1对于初学者和专家来说都是一项重要技能。如果!数字字符{zipcodeDigits=false;这部分似乎有问题。返回一个编译错误,说字符不是为int类型定义的。我感谢您帮助我自己学习Java,并且没有人坐下来帮助我。@user1701604也会更改I@user1701604您越早学会掌握ctrl空格越好。我希望您是使用IDE在Java中编码!当我这样做时,当我输入zipcode@user1701604试试看。我忘了删除这个好答案,真的。与问题下面的第一条评论完全相同,没有任何澄清。更不用说OP是来调试他的代码的。我不知道,但我简历他/她是一个人。OP=公共论坛上使用的原始海报术语;on SO表示问题的所有者。
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
}
while (zipcode.matches("[0-9]{5}"))==false){
System.out.println("You did not enter a 5 digit zipcode: ");
zipcode = in.nextLine();
}
!Character.isDigit(i)
for (int i = 0; i <= zipcode.length(); i++) {
// ...
}
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