質問: br.readLine(); if(input.equals("Y") || input.equals("y")) { yn=true; } else if(input.equals("N") || input.equals("n")) { yn=false; break; } else { System.out.println("YかNを入力してください。"); } } } catch (IOException e) { //入出力時に失敗があった時に行われる処理 e.printStackTrace(); } catch(NumberFormatException e){ //数値以外の値が入力された場合の例外処理 System.out.println("整数で入力してください"); } } } } ``` else if のbreak;なぜ効かないですか?
回答: `break`を置いているのにループが継続してしまう理由としては、 この場合のbreak は、直近のwhileをブレイクするからで上層の`for`はブレイクしません。 `boolean yn` は、大本のループを継続するかどうかを表す真偽値ですから 次の様に ``` boolean yn = true; for(;yn;){ ``` `for` ループの前に置いてループの条件に使うようにします。 あるいは、 ``` for(boolean yn = true; yn; ){ ``` のようにします。 `while`ループは、YyNnのどれかが入力されるまでは繰り返すので、 無限ループにしてYyNnのどれかが入力されたら真偽値をynにセットしてループを抜けるようにします。 ``` while(true){ String input = br.readLine(); if(input.equals("Y") || input.equals("y")){ yn=true;//既定値なので必要は無い break; } else if(input.equals("N") || input.equals("n")){ yn=false; break; }else{ System.out.println("YかNを入力してください。"); } } ```