新型の変数は値を格納する以外にもいろいろな機能を持たせることができるので「変数の型」といわずに「クラス」。「変数」といわずに「インスタンス」と言うと説明しました。その例を挙げます。
前回の 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 を別々に引き出すのではなく,まとめてから引き出すことにします。
次のように拡張します。
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 をこのメソッド(関数)を使って書き直したプログラムです。
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()というメソッドは java の中では特別に定められたメソッドで,System.out.println等の中では省略可能です。
System.out.println( seito1.toString() );
は、次のように書くことができます。
System.out.println( seito1 );
上記の様に Seito1Kamoku.java にメソッド書き加え、コンパイルしなさい。(実行はできません)
上記 Goukei3.java をつくり、コンパイルしてから実行して結果を確認しなさい。