输入无效后继续提示用户

时间:2016-01-23 01:55:04

标签: java

现在我知道有一个名为“使用java.util.Scanner验证输入”的线程。我已经看过那里,那个帖子只回答了我的一半问题。另一半是当有人输入大于2的数字时,我得到数组索引超出界限异常。我只是需要帮助,如果有人为行或列输入3,控制台应该提示这样的事情:

"Enter the coordinates to place an 'X'. Row then Column."
 //enters 3 and 3
"Please enter a valid input"

它会保留并询问用户有效的号码,直到他给出一个。

我需要做一些类似!keyboard.hasNextInt()但是对于整数吗?这将与我的其余代码顺利运行?

2 个答案:

答案 0 :(得分:1)

你可以使用do-while循环。像

这样的东西
do {
    //prompt
    //input
} while (input not valid);

promptinput应由代码替换以提示用户并接受输入。在while部分中,检查输入是否有效。

答案 1 :(得分:0)

你的问题不是太清楚,但我会尝试理解它。

我假设您已将您的扫描仪命名为键盘"

在我尝试运行此代码之前,我能看到的第一个问题就是这个(请注意,我在编辑问题之前从代码中抓取了这个问题):

 while (board[row][col] != ' ') 
{
    System.out.println("Already occupied space");
    System.out.println("Choose again");
    row = keyboard.nextInt();
    col = keyboard.nextInt();
}

之前,您确保用户输入整数。但是,在这种情况下,你完全放弃了。

如果用户输入的不是整数,我假设您正在尝试避免错误,这就是我要做的事情:

while(true){
        boolean valid = true;     

        if(!keyboard.hasNextInt()){
            valid = false;
            keyboard.next();
        }
        else{
            row = keyboard.nextInt();
        }
        if(!keyboard.hasNextInt()){
            valid = false;
            keyboard.next();
        }
        else{
            col = keyboard.nextInt();
        }
        if (valid && (row > 2 || col > 2)){
            System.out.println("Please enter a valid input");
            continue;
        }
        else if(!valid){
            System.out.println("Please enter a valid input");
            continue;
        }
        else
            break;  
    }

这个代码看起来有点长,有几个原因。首先,我们尝试在之前测试输入是否为整数,我们尝试将其存储为int。其次,我们想要比较输入 之后我们成功存储它以查看它是否小于3.如果输入不是整数,则布尔值为"有效和" #34;将是假的。编译器的工作方式,如果if语句中的有效值为false,它将忽略&&的右边的任何内容,从而避免错误。

我承认,这是使用我以前没学​​过的一些命令,所以这可能不是最有效的方法。但你明白了这一点:)

P.S。你应该把上面的代码扔进一个方法。