Java 如何让扫描器循环直到它读取所需的字符串?

Java 如何让扫描器循环直到它读取所需的字符串?,java,java.util.scanner,Java,Java.util.scanner,嗨,我自己也试着弄明白了,但我不能从其他例子中完全理解,大多数例子要么只接受某些字符,要么接受A-Z+A-Z 我试图让程序只接受男性或女性的输入,忽略大小写,如果输入错误,重复“输入性别:”直到输入正确的值。您可以在一段时间内输入代码并每次验证。例如: Scanner one = new Scanner(System.in); System.out.print("Enter Name: "); name = one.nextLine();

嗨,我自己也试着弄明白了,但我不能从其他例子中完全理解,大多数例子要么只接受某些字符,要么接受A-Z+A-Z


我试图让程序只接受男性或女性的输入,忽略大小写,如果输入错误,重复“输入性别:”直到输入正确的值。

您可以在一段时间内输入代码并每次验证。例如:

        Scanner one = new Scanner(System.in);
        System.out.print("Enter Name: ");
        name = one.nextLine();
        System.out.print("Enter Date of Birth: ");
        dateofbirth = one.nextLine();
        System.out.print("Enter Address: ");
        address = one.nextLine();  
        System.out.print("Enter Gender: ");
        gender = //not sure what to do now

您可以在性别分配后添加if检查以显示无效消息

一种方法是使用无限循环和标签来中断。
像这样:

do {
    System.out.print("Enter Gender (M/F): ");
    gender = one.nextLine();
} while (!gender.equalsIgnoreCase("M") && !gender.equalsIgnoreCase("F"));
公共班机{

//Start 
Scanner one = new Scanner(System.in);
here:
while (true){
System.out.print("Enter Gender: ");
    String str = one.nextLine();
        switch (str.toUpperCase()){
            case "MALE":
                System.out.println("Cool");
                break here;
            case "FEMALE":
                System.out.println("Nice");
                break here;
            default:
                System.out.println("Genders variants: Male/Female");
      }
}

我不认为
java.util.Scanner
对解析交互式(人工)输入有用。我使用了
java.io.BufferedReader.readLine()
+
循环。你怎么不觉得
java.util.Scanner
对解析输入有用呢?“我试图让程序只接受男性或女性的输入,忽略大小写”修正了。抱歉,忘了那个部分。谢谢丹尼尔,我不认为你能向我解释while语句是如何工作的?如果性别既不等于男性也不等于女性,它会返回到循环的顶部(do),你能加上说“&&&!gender.equals(“m”)吗'也输入到while语句中,这样如果只输入了m,它就被接受了?这是非常基本的java,您可能需要阅读一两篇教程;-),但速度很快:如果while中的任何条件都为true,那么它将再次循环。条件本身就是逻辑,您可以使用and(&&&)添加更多条件操作员随意。&&!gender.equals(“m”)确实有效。关于do while语句或其他内容的教程?感谢您的帮助,每次循环运行时都会重新创建
扫描仪
,这可能不会给出预期的结果。最好将
扫描仪一号=新扫描仪(System.in)
置于循环之外。
//Start 
Scanner one = new Scanner(System.in);
here:
while (true){
System.out.print("Enter Gender: ");
    String str = one.nextLine();
        switch (str.toUpperCase()){
            case "MALE":
                System.out.println("Cool");
                break here;
            case "FEMALE":
                System.out.println("Nice");
                break here;
            default:
                System.out.println("Genders variants: Male/Female");
      }
}
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.print("Enter Name: ");
    String name = readValue(scanner, null);
    System.out.print("Enter Date of Birth: ");
    String dateofbirth = readValue(scanner, null);
    System.out.print("Enter Address: ");
    String address = readValue(scanner, null);
    System.out.print("Enter Gender: ");
    String gender = readValue(scanner, createGenderMatcher());
}

private static IMatcher createGenderMatcher() {
    return new IMatcher() {
        @Override
        public boolean isMatch(String value) {
            return "male".equalsIgnoreCase(value) || "female".equalsIgnoreCase(value);
        }
    };
}

private static String readValue(Scanner scanner, IMatcher matcher) {
    String value = null;
    do {
        value = scanner.nextLine();
    } while (matcher != null && !matcher.isMatch(value));
    return value;
}

private interface IMatcher {
    public boolean isMatch(String value);
}