2017-12-10 11 views
0

上記にエラーチェックを追加したいと思います。 sFirstNameが正しい場合、Yで確認され、コードの次のセクションに移動します。それがNならば、コードを再実行します。それがYまたはN以外のものなら、ifを再実行します。Java ifまたはexception?

私は例外を見ましたが、上記に該当するかどうかはわかりません。どんな助けもありがとう! mabyeあなたがそれらのいくつかが好き -

は、私はあなたの例のカップルをcreaded、

+2

例外を使用しないでください。 do-whileを使用してください。 –

+0

私は '!" N ".equals(sYesNo)||を信じています。 ! "" Y ".equals(sYesNo)'は常に真です。あなたの入力は常に「N」でもなく「Y」でもないからです。 – QBrute

+1

例外を使ってこのような入力を検証するのは、 https://stackoverflow.com/a/7304405/802482 – Black

答えて

0

、ありがとうございました。 私の個人的な意見は、できるだけ少ない例外を使用することです。制御フローを非常に例外的に中断させたり、例外を逃したりする必要があります。実行時例外では扱いにくい可能性があります。情報隠蔽ではありません)、キャッチブロックを試すのは単純なif文に比べて非常に醜いです:-)しかしコードには:

private boolean confirmFirstName(String firstName) { 
    System.out.println("You wrote " 
      + firstName 
      + " is that correct? \n" 
      + "Y or N"); 
    final String answer = sc.next().toUpperCase(); 
    return answer.equalsIgnoreCase("y"); 
} 

private String enterFirstName() { 
    System.out.println("Please enter Client's first name"); 
    final String sFirstName = sc.nextLine().toUpperCase(); 
    return sFirstName; 
} 

private void getFirstNameV1() { 
    final int maxTrials = 5; 
    // loop for max trials times and break if input is correct 
    for (int i = 0; i < maxTrials; i++) { 
     final String firstName = enterFirstName(); 
     if (confirmFirstName(firstName)) { 
      setMonthlyRates(firstName); 
      break; 
     } 
    } 
} 

private void getFirstNameV2() { 
    final String firstName = enterFirstName(); 
    final boolean valid = confirmFirstName(firstName); 
    // use a recursive function but take care, 
    // there is no exit instead of entering a valid value otherwise you are in an infinite loop 
    if (valid) { 
     setMonthlyRates(firstName); 
    } else { 
     getFirstNameV2(); 
    } 
} 

private void getFirstNameV3() { 
    // first time input 
    String firstName = enterFirstName(); 
    boolean valid = confirmFirstName(firstName); 
    // if not valid loop until its valid, there is also no exit of this loop 
    while (!valid) { 
     firstName = enterFirstName(); 
     valid = confirmFirstName(firstName); 
    } 
    setMonthlyRates(firstName); 
} 

private void getFirstNameV4() { 
    // first time input 
    String firstName = enterFirstName(); 
    boolean valid = confirmFirstName(firstName); 
    final int maxTrials = 5; 
    // if not valid loop for max trials times 
    for (int i = 0; i < maxTrials || valid; i++) { 
     firstName = enterFirstName(); 
     valid = confirmFirstName(firstName); 
    } 
    if (valid) { 
     setMonthlyRates(firstName); 
    } 
} 

private void setMonthlyRates(String firstName) { 
    monthlyRates.setFirstName(firstName); 
} 
+0

ありがとうございます。私はこれらを試して、私が得た出力を見ます:)もう一度感謝します –