2016-04-09 18 views
1

ユーザーからの入力を要求するコードがありますが、うまく動作しますが、実行を継続する代わりに有効な応答を入力するよう再入力する必要があります。ここでJavaで有効な入力を再入力するユーザー

コードです:ユーザー入力のゴールド場合

import java.io.*; 
public class SkiLodge { 

    public static void main(String[] args) throws Exception 
    { 

     InputStreamReader ui = new InputStreamReader (System.in); 
     BufferedReader inputReader = new BufferedReader(ui); 

     System.out.println("Select Membership Type: (Gold/Silver/Bronze)"); 
     String membership = inputReader.readLine(); 

     double x = 0d; 

     if (membership.equals("Gold")) 
      System.out.println("Gold Membership Selected: £" + (x = 750)); 
     else if (membership.equals("Silver")) 
      System.out.println("Silver Membership Selected: £" + (x = 450)); 
     else if (membership.equals("Bronze")) 
      System.out.println("Bronze Membership Selected: £" + (x = 250)); 
     else System.out.println("Invalid Membership"); 



     System.out.println("Do you require snow tyre rental? (yes/no)"); 
     String tyreRental = inputReader.readLine(); 


     if (tyreRental.equals("yes")) 
      System.out.println("The total so far with tyre rental: £" + (x = x * 1.1)); 
     else if (tyreRental.equals("no")) 
      System.out.println("The total so far without tyre rental: £" + x); 
     else System.out.println("Invalid response"); 

     System.out.println("Would you like to reserve parking? (yes/no)"); 
     String parking = inputReader.readLine(); 

     if (parking.equals("yes")) 
     System.out.println("Membership total: £" + (x = x * 1.08)); 
     else if (parking.equals("no")) 
     System.out.println("Membership total: £" + x); 
     else System.out.println("Invalid response"); 
    } 

} 

は、例えばだから、それが無効の会員を出力し、有効なものを要求されていない場合、プログラムは、750を出力します。

次の質問でも同じです。プログラムは有効な応答としてyesとnoのみを受け入れます。

ありがとうございます。

答えて

0

do-whileループを使用できます。

do{ 
    //Some code here 

    //if block 
    else { // last else block. 
     System.out.println("Invalid Membership"); 
     continue; // This will skip the rest of the code and move again to the beginning of the while loop. 
    } 

    //More code 

    break; // If the condition was correct, then you need not worry. This statement will pull out of the loop. 
}while(true); 

これを変更して、このような要件がある場所でdo-whileループを作成することができます。

これはにあなたの全体のコードになるだろう。残念ながら、このような状況では、二つの入力文を避けることのない、本当にエレガントな方法はありません

public static void main(String[] args) throws Exception 
{ 

    InputStreamReader ui = new InputStreamReader (System.in); 
    BufferedReader inputReader = new BufferedReader(ui); 
    String membership, tyreRental,parking; 
    double x = 0d; 
    do 
    { 
     System.out.println("Select Membership Type: (Gold/Silver/Bronze)"); 
     membership = inputReader.readLine(); 

     if (membership.equals("Gold")) 
      System.out.println("Gold Membership Selected: £" + (x = 750)); 
     else if (membership.equals("Silver")) 
      System.out.println("Silver Membership Selected: £" + (x = 450)); 
     else if (membership.equals("Bronze")) 
      System.out.println("Bronze Membership Selected: £" + (x = 250)); 
     else{ 
      System.out.println("Invalid Membership"); 
      continue; 
     } 
     break; 
    }while(true); 

    do{ 
     System.out.println("Do you require snow tyre rental? (yes/no)"); 
     tyreRental = inputReader.readLine(); 

     if (tyreRental.equals("yes")) 
      System.out.println("The total so far with tyre rental: £" + (x = x * 1.1)); 
     else if (tyreRental.equals("no")) 
      System.out.println("The total so far without tyre rental: £" + x); 
     else{ System.out.println("Invalid response"); continue;} 
     break; 
    }while(true); 

    do{ 
     System.out.println("Would you like to reserve parking? (yes/no)"); 
     parking = inputReader.readLine(); 

     if (parking.equals("yes")) 
      System.out.println("Membership total: £" + (x = x * 1.08)); 
     else if (parking.equals("no")) 
      System.out.println("Membership total: £" + x); 
     else {System.out.println("Invalid response"); continue;} 
     break; 
    }while(true); 
} 
0

。そこにこれを行うための様々な方法がありますが、私はneatestが最も簡単です見つける:

System.out.println("Select Membership Type: (Gold/Silver/Bronze)"); 
String membership = inputReader.readLine(); 
while (!membership.matches("Gold|Silver|Bronze")) { 
    System.out.println("Illegal membership Type; please enter one of Gold, Silver or Bronze"); 
    membership = inputReader.readLine(); 
} 

あなたはいくつかの場所でそれを繰り返していなかったように、理想的には、そのロジックの一部をカプセル化します。それはあなたのコードを少しきちんとしたものにします。例:

enum Membership { 
    GOLD(750), 
    SILVER(450), 
    BRONZE(250); 

    private int value; 

    Membership(int value) { 
     this.value = value; 
    } 

    public int getValue() { 
     return value; 
    } 

    public static Membership getByName(String name) { 
     for (Membership membership: values()) 
      if (name.toUpperCase().equals(membership.name)) 
       return membership; 
     return null; 
    } 
} 

System.out.println("Select membership type: " + Membership.values()); 
Membership membership = Membership.getByName(inputReader.readLine()); 
while (membership == null) { 
    System.out.println("Illegal membership Type; enter one of " + Membership.values()); 
    membership = Membership.getByName(inputReader.readLine()); 
} 
int x = membership.getValue(); 
関連する問題