

現在、javaでキャラクター育成ゲームの作成を行っています。コンパイルして

  1. ミルクを与える
  2. 寝る
  3. あやす

という選択肢を入力して、switchでその選択肢ごとにポイントが加算されるよう分岐させています。  
それぞれ選択No.を入力した段階で、その度にポイント加算されたステータスが表示されるようにしたいのですが（getYutoStatus()関数が表示）、現在は

[code]

    $ java part01
    Yuto君、こんにちは！！
    Yuto君は今0才です
    頑張って育てよう
    1. ミルクを与える
    2. 寝る
    3. あやす
    2
    1. ミルクを与える
    2. 寝る
    3. あやす
    3
    1. ミルクを与える
    2. 寝る
    3. あやす
    4
    Yuto君は育成ポイント17でマイナスポイント0
    Yuto君は育成ポイント17でマイナスポイント0
    
[/code]

のようにそのまま次の選択の処理に入ってしまい、結果は最期に表示されています。  
その都度「入力＋結果表示」にする様にできる記述の方法を教えて欲しいです。  
よろしくお願いします。

[code]

    public class part01{
        static String name = "Yuto"; //キャラクターの名前
        static int age;          //キャラクターの年齢
        static int good = 5;         //キャラクターの育成ポイント
        static int wagamama = 0;     //キャラクターのマイナスポイント
    
        public static void main (String[] args) throws java.io.IOException{
            putOpening();
            putCommand();
            putStageClear();
        }
    
        public static void putCommand() throws java.io.IOException{
    
            put("1. ミルクを与える");
            put("2. 寝る");
            put("3. あやす");
    
            switch(inputCommand()){
                case '1':{
                    good += 2;
                    putCommand();
                    getYutoStatus();
                    break;
                }
                case '2':{
                    good += 5;
                    putCommand();
                    getYutoStatus();
                    break;
                }
                case '3':{
                    good += 7;
                    putCommand();
                    getYutoStatus();
                    break;
                }
    
            }
    
        }
    
        /**
        * オープニングを表示
        */
        public static void putOpening(){
            System.out.println(name + "君、こんにちは！！");
            System.out.println(name + "君は今" + age + "才です");
            System.out.println("頑張って育てよう");
        }
    
        public static void getYutoStatus(){
            put(name + "君は" + "育成ポイント" + good + "で" + "マイナスポイント" + wagamama);
        }
    
        /**
        * ステージクリア画面を表示
        */
        public static void putStageClear(){
    
            if(good >= 20){
                age = 1;
                put(name + "君は" + age + "才になりました!!");
            }else if(good >= 30){
                age = 2;
                put(name + "君は" + age + "才になりました!!");
            }else if(good >= 40){
                age = 3;
                put(name + "君は" + age + "才になりました!!");
            }
        }
    
        /**
        * 育児を行う
        */
        /*
        static void ikuji(){
        //育児ポイントの上昇
        //わがまま・マイナスポイント
            int d = r.nextInt(8);
            wagamama　-= d;
    
        }
        */
    
        public static int inputCommand() throws java.io.IOException{
    
                int c = System.in.read();
                if(c == 10 || c == 13){
                    return(inputCommand());
                }
                return(c);
        }
    
        public static void put(String str){
            System.out.println(str);
        }
    
    }
    
[/code]


CC BY-SA 3.0
2018-03-19T02:51:32.643
42481
2018-03-30T05:27:20.630
2018-03-19T02:59:40.047
3060
9769
question
java
switch文の中でのステータス表示を繰り返したい


結論からいわせていただきますと、switch文の中のgetYutoStatus()をputCommand()の前にすればいいと思います。

補足：  
1\. switch文にdefault処理をいれましょう  
2\. nameをprivate static finalにしましょう  
3\.
inputCommandメソッドのif文のところ、マジックナンバーように見えますが、10と13って何でしょうか？意味のある数字であれば、定数を定義して使ってみませんか


CC BY-SA 3.0
2018-03-30T05:16:59.000
42773
2018-03-30T05:27:20.630
2018-03-30T05:27:20.630
27732
27732
42481
answer