メソッドの値渡しと参照(値)渡しの違いを理解するための演習です。
Q1
以下のソースコードを打ち込み、実行例のようになるように確認し、値渡しの挙動を確認せよ。
public class Q1 { public static void main(String[] args){ System.out.print("数値を入力してください>"); int a=new java.util.Scanner(System.in).nextInt(); multiNum(a); //\nは改行文字(win環境では¥n) System.out.printf("a=%d\n",a); System.out.println("値渡しはもともとの引数には影響しません。"); } public static void multiNum(int num){ System.out.printf("%dを2倍します\n",num); num=num*2; System.out.printf("%dになりました。\n",num); } }
[実行結果]
数値を入力してください>100 100を2倍します 200になりました。 a=100 値渡しはもともとの引数には影響しません。
Q2
以下のソースコードを打ち込み、実行例のようになるように確認し、 参照(値)渡しの挙動を確認せよ。
public class Q2 { public static void main(String[] args){ System.out.print("配列の要素数を入力してください>"); int len=new java.util.Scanner(System.in).nextInt(); int[] nums=new int[len]; for(int i=0;i<nums.length;i++){ System.out.printf("nums[%d]:>",i); nums[i]=new java.util.Scanner(System.in).nextInt(); } displayArray(nums); multiNum(nums); System.out.println("もともとの配列を出力します。"); displayArray(nums); System.out.println("参照値渡しはもともとの引数に影響を及ぼします。(操作している配列は一つ)"); } public static void multiNum(int[] nums){ System.out.println("配列の要素を2倍します。"); for(int i=0;i<nums.length;i++){ nums[i]*=2; } displayArray(nums); } public static void displayArray(int[] arr){ System.out.print("{"); for(int i=0;i<arr.length;i++){ System.out.printf("%d,",arr[i]); } System.out.println("}"); } }
[実行結果]
配列の要素数を入力してください>3 nums[0]:>3 nums[1]:>7 nums[2]:>10 {3,7,10,} 配列の要素を2倍します。 {6,14,20,} もともとの配列を出力します。 {6,14,20,} 参照値渡しはもともとの引数に影響を及ぼします。(操作している配列は一つ)
コメント