プログラミング基礎

メソッド(1) クラスメソッド、return文(2)

出席確認

演習参考資料

本日の授業のテキスト範囲

テキスト「ITText Java基本プログラミング」
  1. pp.83-89 (4.3メソッドの呼び出しまで)
  2. pp.94-95 (4.4.4.メソッドの戻り値)

演習の達成目標

提出課題(6問)

提出課題 3, 4, 5, 6, 7, 8 ※提出必須
チャレンジ課題 1 ※自習用課題

コメントとインデントを参考に、各プログラムは正しくインデントすること。
  1. 下記例題3は、学歌の歌詞を標準出力に表示するプログラムである。
    例題3-1
    public class Kadai10_3{
        public static void main(String[] args){
            System.out.println("新墾の千城ケ丘に");
            System.out.println("今開くあしたへの門");
            System.out.println("われ等ともにここに集いぬ");
            System.out.println("新たなる門出のために");
            System.out.println("昨日までかくありぬとも");
            System.out.println("今日はまた泥むことなし");
            System.out.println("明日ゆくはいかなる道ぞ");
            System.out.println("わが旅の終わることなく");
            System.out.println();
        }
    }
    
    歌詞を3回表示するようにプログラムを変更したい。
    ただし、歌詞の部分をループで繰り返す代わりに、歌詞を表示する処理をメソッドlyrics()として実装し、このメソッドをmain()メソッドから3回呼び出すようにしたい。
    修正後のmain()メソッドは下記例題3-2のような形になるように、クラスメソッドlyrics()を実装し、プログラム Kadai10_3.java を修正せよ。
    例題3-2
        public static void main(String[] args){
            System.out.println("学歌を歌いましょう\n");
            lyrics(); //メソッド lyrics() 呼び出し
            System.out.println("大きな声で歌いましょう\n");
            lyrics(); //メソッド lyrics() 呼び出し
            System.out.println("心を込めて歌いましょう\n");
            lyrics(); //メソッド lyrics() 呼び出し
        }
    
    \n は改行を意味するエスケープシーケンスである。(テキストp.26)

    実行結果(修正後)
    学歌を歌いましょう
    
    新墾の千城ケ丘に
    今開くあしたへの門
    われ等ともにここに集いぬ
    新たなる門出のために
    昨日までかくありぬとも
    今日はまた泥むことなし
    明日ゆくはいかなる道ぞ
    わが旅の終わることなく
    
    大きな声で歌いましょう
    
    新墾の千城ケ丘に
    今開くあしたへの門
    われ等ともにここに集いぬ
    新たなる門出のために
    昨日までかくありぬとも
    今日はまた泥むことなし
    明日ゆくはいかなる道ぞ
    わが旅の終わることなく
    
    心を込めて歌いましょう
    
    新墾の千城ケ丘に
    今開くあしたへの門
    われ等ともにここに集いぬ
    新たなる門出のために
    昨日までかくありぬとも
    今日はまた泥むことなし
    明日ゆくはいかなる道ぞ
    わが旅の終わることなく
    
    

  2. 下記例題4-1はサイコロを振るサンプルプログラムである。
    例題4-1
    public class Kadai10_4 {
        public static void main(String[] args){
            int dice;
    
            dice = (int)(Math.random()*6)+1; //1-6 を乱数で生成
    
            System.out.println("dice = "+dice);
        }
    }
    
    上記例題4-1を、サイコロを3回振った結果を表示するようにプログラムを変更したい。
    ただし、サイコロの乱数を決定する処理をメソッドroll()として実装し、このメソッドをmain()メソッドから3回呼び出すようにしたい。
    修正後のmain()メソッドは下記例題4-2のような形になるように、int型メソッドroll()を実装し、プログラム Kadai10_4.java を修正せよ。
    例題4-2
        public static void main(String[] args){
            int dice1, dice2, dice3;
    
            dice1 = roll();
            dice2 = roll();
            dice3 = roll();
    
            System.out.println("dice1 = "+dice1);
            System.out.println("dice2 = "+dice2);
            System.out.println("dice3 = "+dice3);
        }
    
    実行例(修正後)
    dice1 = 3
    dice2 = 5
    dice3 = 2
    
    ※サイコロの目の結果は、ランダムのため実行毎に違う。

  3. メソッドから別のメソッドを呼び出すこともできる。
    下記例題5では、メソッドhelloworld()からメソッドhello()を呼び出している。
    例題5
    public class Kadai10_5 {
        public static void main(String[] args){
            helloworld();  //メソッドhelloworld()を呼び出す
        }
    
        static void helloworld(){
            hello();  //メソッドhello()を呼び出す
            System.out.println(", World!");
        }
    
        static void hello(){
            System.out.print("Hello");
        }
    }
    
    上記例題を参考に、", World!"を標準出力に出力するメソッドworld()を新たに追加し、メソッドhelloworld()の中でSystem.out.println(", World!");の代わりにメソッドworld()を呼び出し、標準出力に"Hello, World!"と表示するように、プログラム Kadai10_5.java を修正せよ。

    実行例(修正後)
    Hello, World!
    

  4. main()メソッドはvoid型メソッドなので、return で終了することができる。
    下記例題6では、標準入力から'y'を入力すると、正常にプログラムを終了したい。しかし、下記例題のままでは、'y'を入力しても、処理を続行してしまう。
    例題6
    import java.io.IOException;
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    public class Kadai10_6 {
        public static void main(String[] args) throws IOException{
            BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
            System.out.print("終了しますか?(y/n):");
            String s = buf.readLine();
            if(s.equals("y")){
                System.out.println("終了します");
            }
            System.out.println("処理を続行します");
        }
    }
    
    上記例題を参考に、適切な場所に return を追加し、標準入力から'y'が入力された場合に、"終了します"と表示した後に正常終了するように、プログラム Kadai10_6.java を修正せよ。

    実行例(修正後)
    終了しますか?(y/n):y
    終了します
    
    水色は標準入力からの入力

  5. 下記例題7は、標準入力からユーザの年齢を入力し、年齢に応じたチケット種別の料金を表示するプログラムである。
    メソッドticket()は、標準入力から年齢を読み込み、年齢に応じてチケット種別(0~2)を返す。
    例題7
    import java.io.IOException;
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    public class Kadai10_7 {
        public static void main(String[] args)throws IOException{
            switch(ticket()){ //チケット種別により料金を選択
            case 0:
                System.out.println("\\0");
                break;
            case 1:
                System.out.println("\\800");
                break;
            case 2:
                System.out.println("\\1600");
                break;
            }
        }
    
        static int ticket() throws IOException{
            BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
            System.out.print("年齢を入力:");
            int age=Integer.parseInt(buf.readLine());
    
            if(age<3){
                System.out.println("3才未満は無料");
                return 0;  //チケット種別'0'を返す
            }else if(age<16){
                System.out.println("15才以下は子供料金");
                return 1;  //チケット種別'1'を返す
            }
    
            System.out.println("大人料金");
            return 2;      //チケット種別'2'を返す
        }
    }
    
    \\ は \ 記号(バックスラッシュ・円記号)の文字リテラルを意味するエスケープシーケンスである。(テキストp.26)

    上記例題を参考に、新たに60才以上の年齢のチケット種別を3と返す処理をメソッドticket()に追加し、main()メソッドでチケット種別3をチケット種別1と同じく"\800"と表示するよう、プログラム Kadai10_7.java を修正せよ。

    実行例(修正後)
    年齢を入力:65
    60才以上はシニア料金
    \800
    
    水色は標準入力からの入力

  6. 下記説明通りのプログラム Kadai10_8.java を作成せよ。
    標準入力から整数を読み込み、数値が20以上の場合、メソッドvoid adult()を呼び出し、20未満の場合はメソッドvoid child()を呼び出す。
    メソッドvoid adult()は、「成人です」と標準出力に表示する。
    メソッドvoid child()は、「未成年です」と標準出力に表示する。

    Kadai10_8 実行例
    年齢を入力: 19
    未成年です
    
    年齢を入力: 21
    成人です
    
    水色は標準入力(キーボード)からの入力
正しく実行できることを確認の上、期限内に提出課題のプログラムを提出せよ。

チャレンジ課題

「丁半(サイコロ)ゲーム」
※チャレンジ課題は自習用課題のため提出しない

次回までの復習範囲

  1. テキスト「ITText Java基本プログラミング」p.83-89 (4.3メソッドの呼び出しまで)を読む。
  2. テキスト「ITText Java基本プログラミング」p.94-95 (4.4.4.メソッドの戻り値)を読む。

<mackin>