Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用不同的打印语句进行多个条件输入验证?_Java_Validation_Input - Fatal编程技术网

Java 如何使用不同的打印语句进行多个条件输入验证?

Java 如何使用不同的打印语句进行多个条件输入验证?,java,validation,input,Java,Validation,Input,我是Java初学者,遇到的问题是我不确定如何将输入验证链接在一起,以便对用户的错误输入做出正确的响应。例如,当用户输入的内容不是字母时,程序会告诉用户他们输入的内容不是字母,但如果我输入多个字母,程序不会打印出正确的响应。这取决于用户首先犯的错误 我感谢所有的反馈 String input; final Pattern alphabet = Pattern.compile("^[A-Za-z]$"); Scanner kb = new Scanner(System.in);

我是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();

您可以尝试这样做:使其成为if中的检查条件并得到结果

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;

}
或者您可以将您的输入分配给一个新的类包(输入、错误和是否有错误),使其更灵活

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循环来检查条件。
第二,正确设计程序循环>验证错误。


您应该编写比容易发现错误更实用、更干净的代码。尽量少使用循环,这样会导致更多错误,使用

的程序内存第二种解决方案更符合我的要求,因为它需要不断要求用户在出错时实际输入一些内容,而第一种解决方案不会这样做。