回答編集履歴

1 コードを修正

LLman

LLman score 5226

2015/07/23 16:48  投稿

ご質問の要件に対してはすでに回答されていますが、
なぜバグが起きたのかという別の視点から答えます。
処理の流れを把握していないから、無限ループが起きたのです。
コードの制御構造の読み取りにくさも要因のひとつでしょう。
forやifのインデントはかならずそろえた上で、
なるべくネストが深くならないようにします。
すくなくとも最後のelseは離れすぎです。
> if(cm%2 !=0){
> // いろいろな処理(略)
> }else{
>                System.out.println("奇数を入力してください。");
>            }
元のソースでは上のようになっていますが、
> if(cm%2 =0){
> System.out.println("奇数を入力してください。");
> if(cm%2 == 0){
>    System.out.println("奇数を入力してください。");
> // 入力処理(略)
> }
> // いろいろな処理(略)
この場合のelseは上のように外せます。
そのようにいろいろ工夫してネストを浅くしましょう。
コードをきれいにするだけで、制御構造が分かるので、
おのずとバグが見つかる場合もよくあります。
逆にこのスタイルで書き続ける限り、
同じようなバグに悩まされ続けると思います。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る