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