メソッドの値渡しと参照(値)渡しの違いを理解するための演習です。
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,}
参照値渡しはもともとの引数に影響を及ぼします。(操作している配列は一つ)
コメント