2015-04-16 71 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