我试图打印出ISBN号码,用户输入10个号码,程序将检查以下条件是否正确:输入只是数字,输入是10个字母长。那就是它。
问题:无论如何,' if'声明不会运行。即使我的输入是" 1234567899" < = 10个字母。到目前为止,我无法看到问题所在。
我可能犯了一个非常愚蠢的错误.... :(
编辑:我不知道为什么,但我似乎无法在if语句中访问ary [0],ary [1]等等。我得到了java.lang.ArrayIndexOutOfBoundsException:1'错误信息。我错了吗?我发现,String [] ary = svar.split("");没有按预期工作。 ary只有一个元素,整个该死的输入。我想分割输入中的每个字符,并将输入中的每个整数存储到数组ary中的单个元素中,这就是我收到此错误的原因。
import java.util.*;
class isIntegerclass{
public static boolean isValid(String s) {
try {
Integer.parseInt(s);
} catch(NumberFormatException e) {
return false; }
return true;
}
}
class ISBNcheck {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter input: "); //ask for input
String svar = input.nextLine(); // read input
if (isIntegerclass.isValid(svar) && svar.length() == 9) {
String[] ary = svar.split(" ");//put the numbers in string 'svar' into array called ary.
System.out.println("True: ");
// accessing elements in array
System.out.println(" " + ary[0] + " - " + ary[1] + " " + ary[2] + " " + ary[3] + " - " + ary[4] + " " + ary[5] + " " + ary[6] + " " + ary[7] + " " + ary[8] + " - " + ary[9]); //print
} else {
System.out.println("This is not the right input...");
System.out.println("The number must be 10 letters(numbers only) long. No need for dashes in between.");
System.out.println("[] - [][][] - [][][][][] - []");
}
}
}
答案 0 :(得分:3)
请不要依赖正常程序流程的例外情况,它们应该用于特殊情况。
为什么不使用它呢?
private static boolean isValidISBN(String s) {
return s.matches("^[0-9]{10}$");
}
编辑:也许我需要解释一下。 "^[0-9]{10}$"
是regular expression。 ^
代表字符串的开头,$
表示结尾。 [0-9]
表示任何数字,{10}
是数字位数。
答案 1 :(得分:2)
m:无论如何,'if'语句都不会运行。即使我的输入是“1234567899”< = 10个字母。到目前为止,我看不出问题所在。
因为您只接受9个字符String
,并期望它适用于10个字符(1234567899
)String
svar.length() == 9