値を格納する以外の機能

クラスに機能を追加する

新型の変数は値を格納する以外にもいろいろな機能を持たせることができるので「変数の型」といわずに「クラス」。「変数」といわずに「インスタンス」と言うと説明しました。その例を挙げます。

前回の Seito.java や Goukei2.java で、名前と点数を表示する部分がなにをやっているかわかりにくいですね。つまり、

System.out.print( test1.namae );
System.out.print( " " );
System.out.println( test1.ten )

の部分を

System.out.println( test1 );

などとできれば簡単になります。

クラス内で作業をさせる

test1から,test1.namae と test1.ten を別々に引き出すのではなく,まとめてから引き出すことにします。

ファイル名 Seito1Kamoku.java

次のように拡張します。

public class Seito1Kamoku { 
    /* フィールド */
    String namae;
    int ten;
    /* コンストラクタ */
    public Seito1Kamoku( String s, int n ){
       namae = s;
       ten   = n;
    }
    /* メソッド */
    public String toString(){
       return namae + " " + ten ;
    }
}

メソッドと書いてある部分がそれです。

今までの言語ではこのようなものを関数とか手続きと読んでいることが多いのですが、javaではメソッドと呼んでいます。

返す値は namae + " " + ten で、データの型はStringです。

toString()の前のStringが、String型のデータを返すという印です。。

returnの後にある式 namae + " " + ten の処理結果が返す値になります。

これはコンパイルだけします。mainがないので実行はできません。

メソッドを使う

使い方は、フィールドに似ています。単純なインスタンスの時は,

System.out.println( seito1.toString() );

配列になっている時は,

System.out.println( seito1[i].toString() );

Goukei2.java をこのメソッド(関数)を使って書き直したプログラムです。

ファイル名 Goukei3.java

public class Goukei3 { 
    public static void main( String[] args ) {
       Seito1Kamoku[] test1 = {
               new Seito1Kamoku("岩井 亜紀",78),
               new Seito1Kamoku("河合 和子",45),
               new Seito1Kamoku("木原 園子",65),
               new Seito1Kamoku("布川 麻子",35),
               new Seito1Kamoku("福永 秋絵",92),
               new Seito1Kamoku("三上 美奈",63),
               new Seito1Kamoku("矢島 千晶",57),
               new Seito1Kamoku("吉沢 裕子",89),
               new Seito1Kamoku("渡辺 智子",84)
       };
       double goukei = 0;
       for ( int i=0; i < test1.length ; i++ ){
           System.out.println( test1[i].toString() );
           goukei = goukei + test1[i].ten;
       }
       System.out.println( goukei );
       System.out.println( goukei/test1.length );
    }
}

書き直しただけなので結果はおなじはずです。Goukei2 よりもこちらがわかりやすいと感ずることができれば、まずまずです。

$ java Goukei3
岩井 亜紀 78
河合 和子 45
木原 園子 65
布川 麻子 35
福永 秋絵 92
三上 美奈 63
矢島 千晶 57
吉沢 裕子 89
渡辺 智子 84
608.0
67.55555555555556

toString()の省略

実は,toString()というメソッドは java の中では特別に定められたメソッドで,System.out.println等の中では省略可能です。

System.out.println( seito1.toString() );

は、次のように書くことができます。

System.out.println( seito1 );

課題

1.

上記の様に Seito1Kamoku.java にメソッド書き加え、コンパイルしなさい。(実行はできません)

ファイル名 Seito1Kamoku.java

2.

上記 Goukei3.java をつくり、コンパイルしてから実行して結果を確認しなさい。

ファイル名 Goukei3.java


聖愛高等学校
http://www.seiai.ed.jp/
Last Modified