如何用不同的print语句进行多条件输入验证?

f87krz0w  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(305)

我是java初学者,遇到的问题是我不确定如何将输入验证链接在一起,以便对用户的错误输入做出正确的响应。例如,当用户输入的不是字母的内容时,程序会告诉用户他们输入的不是字母,但是如果我输入多个字母,程序就不会打印出正确的响应。这取决于用户首先犯的错误。
感谢所有反馈。

String input;
final Pattern alphabet = Pattern.compile("^[A-Za-z]$");
Scanner kb = new Scanner(System.in);

System.out.println("Enter a letter of the alphabet: ");
input = kb.nextLine();

while (!alphabet.matcher(input).matches())
{
    System.out.println("That's not a letter, try again.");
    input = kb.nextLine();
}

while (input.length() > 1 )
{
    System.out.println("Please enter only one letter");
    input = kb.nextLine();
}

kb.close();
fivyi3re

fivyi3re1#

你可以试着这样做:在if中使其成为check条件并得到结果

final Pattern alphabet = Pattern.compile("^[A-Za-z]$");
Scanner kb = new Scanner(System.in);

public void drive_main() {
    System.out.println("Enter a letter of the alphabet: ");
    String input = getInput();
    while (input == null) {
        input = getInput();
    }
}

public String getInput() {

    String result;
    result = kb.nextLine();
    if (!alphabet.matcher(result).matches()) {
        System.out.println("That's not a letter, try again.");
        return null;
    }
    if (result.length() > 1) {
        System.out.println("Please enter only one letter");
        return null;
    }
    return result;

}

或者您可以将您的输入分配给一个新的类包(input、error和have an error or or not),使其更灵活。

final Pattern alphabet = Pattern.compile("^[A-Za-z]$");
Scanner kb = new Scanner(System.in);

public void drive_main() {
    System.out.println("Enter a letter of the alphabet: ");
    InputSet input = getInput(kb.nextLine());
    while (input.isError) {
        System.out.println(input.errorMessage);
        input = getInput(kb.nextLine());
    }
}

public InputSet getInput(String input) {
    InputSet result = new InputSet(input, false, "");
    if (!alphabet.matcher(result.input).matches()) {
        result.errorMessage = "That's not a letter, try again.";
        result.isError = true;
    }
    if (result.input.length() > 1) {
        result.errorMessage = "Please enter only one letter";
        result.isError = true;
    }
    return result;
}

private class InputSet {

    String input;
    boolean isError;
    String errorMessage;

    InputSet() {

    }

    InputSet(String input, boolean isError, String errorMessage) {
        this.input = input;
        this.isError = isError;
        this.errorMessage = errorMessage;
    }
}

首先,您不应该使用while循环来检查条件。
第二,正确设计程序循环>验证错误。
你应该做更多好的实用和干净的代码比你可以很容易地找到错误。尽量少用循环,这样会导致更多的错误和程序内存占用

相关问题