我的输入和if-else语句有些不对劲,

时间:2014-06-20 16:36:36

标签: java if-statement methods

我试图打印出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("[] - [][][] - [][][][][] - []");
        }
    }
}

2 个答案:

答案 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个字符(1234567899String

svar.length() == 9