java中的输入检查方法

时间:2013-06-28 22:05:32

标签: java methods input

我有一个输入检查功能,可以从用户那里获取输入。 (它应该是小写字母和数字。它用于战舰游戏。)该函数需要从输入中删除空格,小写它,并检查以确保第一个字符是字母,第二个字符是数字。字母必须是从a到g,以及从1到7的数字。我写了一些代码,但由于某种原因,在任何错误之后,程序结束。它应该说一条错误消息并等待新的输入。我做错了什么?这是我的代码。

        inputLine = is.readLine();
        inputLine = inputLine.replaceAll("\\s", "");
        inputLine = inputLine.toLowerCase();
        if (inputLine.length() == 0)
            inputLine = null;
        else if (inputLine.length() > 2) {
            System.out.println("Invalid input, please enter column (a-g) and row (1-7)");
            inputLine = null;
        } else {
            if (Character.isLetter(inputLine.charAt(0))) {
                char i = inputLine.charAt(0);
                if (i < 'a' || i > 'g') {
                    System.out.println("Invalid input, please enter a letter a to g");
                    inputLine = null;
                }
                int row = i - 'a';
                if (Character.isDigit(inputLine.charAt(1))) {
                    int k = (inputLine.charAt(1) - '0');
                    if (k < 1 || k > 7) {
                        System.out.println("Invalid input, please enter a digit 1 to 7");
                        inputLine = null;
                    }
                }
            }
        }
    } catch (IOException e) {
        System.out.println("IOException: " + e);
    }
    return inputLine;
}

1 个答案:

答案 0 :(得分:0)

下面的代码块将抛出空指针异常。如果第一个字符无效且第一个if被执行,则输入行设置为null。然后在下一个if中,您在inputline上调用一个方法(现在为null)并抛出异常。而不是inputline=null;,而是将其更改为return null;,并立即返回null。

if (i<'a' || i>'g')
{
    System.out.println("Invalid input, please enter a letter a to g");
    inputLine = null;
}
int row = i -'a';
if (Character.isDigit(inputLine.charAt(1)))