
[code]

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    public class LoToi1 {
        public static void main(String[] args) {
                //入力するための準備
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("入力された年が閏年か判別します。");
            for(;;){
            //メッセージを表示する
                System.out.println("西暦を整数入力してください。");
                try {
                    //入力する情報を取得
                    String line = br.readLine();
                    //文字列を数値に変換
                    int a = Integer.parseInt(line);
                    //閏年の判定処理
                    if (a%4 == 0 && a%100 != 0 || a%400 == 0) {
                        System.out.println("閏年です。");
                    } else { //それ以外の処理
                        System.out.println("閏年ではありません。");
                    }
                    System.out.println("続けますか？Y/N");
                    boolean yn = false;
                    while(!yn) {
                        String input = 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("整数で入力してください");
                }
            }
        }
    }
    
[/code]

else if のbreak；なぜ効かないですか？


CC BY-SA 3.0
2015-07-21T01:18:00.663
12513
2015-07-21T02:10:32.327
2015-07-21T01:24:17.957
845
10601
question
java
java 続けますか？Y/N判定で　Nを入力しても止まりません


質問の意図からすると、外側の`for()`ループを`break`で抜けようとしているのですが、直近の`while(!yn)`ループを抜けるだけになっていますね。

あまり使いませんが、ラベル付き`break`にすると解決します。

[code]

    public class LoToi1 {
        public static void main(String[] args) {
            //入力するための準備
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("入力された年が閏年か判別します。");
            outLoop: for(;;){ // ラベルをつける
                //メッセージを表示する
                System.out.println("西暦を整数入力してください。");
    
                // 中略
    
                boolean yn = false;
                while(!yn) {
                    String input = br.readLine();
                    if(input.equals("Y") || input.equals("y")) {
                        yn=true;
                    } else if(input.equals("N") || input.equals("n")) {
                        yn=false;
                        break outLoop; // ラベル指定でbreak
                    } else {
                        System.out.println("YかNを入力してください。");
                    }    
                }
    
                // 中略    
            } // end of for(;;)
        } // end of void main()
    }
    
[/code]


CC BY-SA 3.0
2015-07-21T01:31:58.430
12514
2015-07-21T01:31:58.430
845
12513
answer


`break`を置いているのにループが継続してしまう理由としては、  
この場合のbreak は、直近のwhileをブレイクするからで上層の`for`はブレイクしません。

`boolean yn` は、大本のループを継続するかどうかを表す真偽値ですから  
次の様に

[code]

    boolean yn = true;
    for(;yn;){
    
[/code]

`for` ループの前に置いてループの条件に使うようにします。  
あるいは、

[code]

    for(boolean yn = true; yn; ){
    
[/code]

のようにします。

`while`ループは、YyNnのどれかが入力されるまでは繰り返すので、  
無限ループにしてYyNnのどれかが入力されたら真偽値をynにセットしてループを抜けるようにします。

[code]

    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を入力してください。");
        }
    }
    
[/code]


CC BY-SA 3.0
2015-07-21T02:04:50.030
12515
2015-07-21T02:10:32.327
2015-07-21T02:10:32.327
5044
5044
12513
answer