2015-04-16 183 views
3
 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 

您好我一直试图算出这个自己,但我不能完全从寻找其他的例子得到它,大多数要么只接受某些字符或A-Z + AZ如何让扫描仪循环读取所需的字符串?

我想使程序只接受男性或女性的输入而忽略案件,如果输入错误重复“输入性别:”直到输入正确的值。

+0

我不觉得'''java.util.Scanner''',对于解析互动(人)输入有用。我使用''''''java.io.BufferedReader.readLine()''''''while'''''''''''''''' –

+0

如何找不到用于解析输入的'java.util.Scanner'? –

回答

6

你可以放一段代码,每次验证一次。例如:

String gender; 
do 
{ 
    System.out.print("Enter Gender ('male' or 'female'): "); 
    gender = one.nextLine().toLowercase(); 
} while(!gender.equals("male") && !gender.equals("female")) 
+0

*“我试图让程序只接受男性或女性忽视案件的输入”* –

+1

固定。对不起,忘了那部分。 –

+0

谢谢丹尼尔,我不认为你可以向我解释这些声明是如何工作的?如果性别既不等于男性也不等于女性,它会返回到循环的顶部(do)?,您是否可以在while语句中添加'&&!gender.equals(“m”)',以便只要m键入它被接受? – Purdy

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

您可以添加后,如果性别分配检查显示无效的消息,要做到这一点

+0

非常感谢您 – Purdy

1

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

//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"); 
     } 
} 
+0

每次循环运行时都会重新创建'Scanner',这可能无法提供预期结果。最好将'Scanner one = new Scanner(System.in)'放在循环中。 – JonasCz

+0

正确,修正。 – High5

+0

非常感谢你 – Purdy

1

公共类主要{

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); 
} 
+0

非常感谢你 – Purdy