Javaの学習を始めて12日くらいの人のための問題集(値渡しと参照値渡し)

Java

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

コメント

タイトルとURLをコピーしました