Java入門 5.9 メソッドのオーバーロード 5.10 変数の引渡し 2003/11/21 紺野憲一 メソッドのオーバーロード メソッドのオーバーロード 引数の数や型が違えば同じ名前の変数を 複数個利用できる。 例) int mes(int a,int b,int c) int mes(int a,int b,int c,int d) int mes(int a,int b,double c) これは同時に宣言する事ができる。 引数の引渡し メソッドに引き渡した変数をメソッド内部で変更し ても外部での値は変わらない。これはメソッドに 引き渡される値は別個に用意して用いられるた めである。 しかし、配列やオブジェクトを引き渡す場合その 参照(Cで言うポインタ)が引き渡されるため変更 が外部まで影響される。 ※参照(ポインタ):変数や配列が保存されているメモリ の場所を指す。 引数の受け渡し例1 メソッドaに ・int i ・int j[3] ・StringBuffer sb の3つを受け渡し した2つは自動的に参 照受け渡しになる。 class Mozii { public static void a(int i,int j[],StringBuffer sb) { i=5; j[0]=6; sb.append("efgh"); } public static void main(String args[]) { int a=1,b[]={2,3,4}; StringBuffer sb=new StringBuffer("abcd"); System.out.println(a+" "+b[0]+" "+b[1]+" "+b[2]+" "+sb); a(a,b,sb); System.out.println(a+" "+b[0]+" "+b[1]+" "+b[2]+" "+sb); }} 出力結果 1 2 3 4 abcd 1 6 3 4 abcdefgh 引数の受け渡し例2 henkouにtの参照のコ ピーが渡される。 ここではhenkou中でjの参 照を変更している。 メイン中では元のjの位置 を参照するので値は変わ らない。 class Mozii { public static void henkou(int j[]) { int t[]={6,7,8}; j=t; } public static void main(String args[]) { int b[]={2,3,4}; System.out.println(b[0]+" "+b[1]+" "+b[2]); henkou(b); System.out.println(b[0]+" "+b[1]+" "+b[2]); }} 出力結果 2 3 4 234 問題 (1)コマンドラインから数を2個から4個入力 しその和を出力するプログラムを作れ。 (2)例2で関数の実行後に値が変わるように するにはどうすればよいか答えよ。 回答 (1) class Mozii { public static void tasu(int a,int b,int c,int d) { System.out.println(a+b+c+d); } public static void tasu(int a,int b,int c) { System.out.println(a+b+c); } public static void tasu(int a,int b) { System.out.println(a+b); } public static void main(String args[]) { int a,b,c,d; if(args.length==4){ a=Integer.parseInt(args[0]); b=Integer.parseInt(args[1]); c=Integer.parseInt(args[2]); d=Integer.parseInt(args[3]); tasu(a,b,c,d);} if(args.length==3){ a=Integer.parseInt(args[0]); b=Integer.parseInt(args[1]); c=Integer.parseInt(args[2]); tasu(a,b,c);} if(args.length==2){ a=Integer.parseInt(args[0]); b=Integer.parseInt(args[1]); tasu(a,b);} }} 回答 (2)メソッド内部のみ public static void henkou(int j[]) { int t[]={6,7,8}; j[0]=t[0]; j[1]=t[1]; j[2]=t[2]; }
© Copyright 2024 ExpyDoc