メソッドを呼び出すことにより、アレイなインデックスを入れ替えます

mightymorphinParkRanger:

解決済み(コード更新されます)

私は私のコードが動作しない理由を見つけるのトラブルを抱えています。私はスワップ値と限り、私は承知しているとして、それが動作するはずという方法があります。私はここで、このリンクを見てきましたが、私は間違っていたところ、私は(私はそれがJavaのではありません知っているが、コンセプトは同じである)言うことができないhttps://www.kirupa.com/html5/swapping_items_array_js.htm

ここでは、コードの出力例です。

4
1
1
1
1
Provide two indicies to swap
0
2
4
1
1
1
1

/

import java.util.Scanner;
public class Test100 {

    public static void main(String[] args) {
        Scanner arrayScan = new Scanner(System.in);
        int[] values = new int[5];

        values[0] = 4;
        values[1] = 1;
        values[2] = 1;
        values[3] = 1;
        values[4] = 1;

        System.out.println(values[0]);
        System.out.println(values[1]);
        System.out.println(values[2]);
        System.out.println(values[3]);
        System.out.println(values[4]);

//      provide user input to choose values to swap
        System.out.println("Provide two indicies to swap");
        int userInput1 = Integer.valueOf(arrayScan.nextLine());
        int userInput2 = Integer.valueOf(arrayScan.nextLine());

        int inputArray1 = values[userInput1];
        int inputArray2 = values[userInput2];


        valSwap(values, userInput1, userInput2);    

        System.out.println(values[0]);
        System.out.println(values[1]);
        System.out.println(values[2]);
        System.out.println(values[3]);
        System.out.println(values[4]);

    }

    public static void valSwap(int[] array, int input1, int input2) {
    int swapper = array[input1];
    array[input1] = array[input2];
    array[input2] = swapper;

    }
}

私はそれを呼び出したときに、私はもともとメソッド内で使用され、私の引数内の配列indicieに入れていたことに気づきました。私は、ユーザー@Joop Eggenが言及していたもののオフに基づいて方法を変え実現しているため、ユーザが入力された値だけにそれを切り換えます。私はそれを一致させるために、私の方法を変更し、その後、私はそれを呼び出したときに、引数を変更します。

ジョープEggen:

ようにJavaが設計されたf(x)渡された変数を変更することはありませんx変数の(オブジェクト)の値が渡されたであることはなく、「アドレス」いくつかの変数の(参照)。

配列位置を交換するので:

void swap(int[] array, int index1, int index2) {
    int temp = array[index1];
    array[index1] = array[index2];
    array[index2] = temp;
}

だから、swap(values, 2, 3)決して変わらないvaluesnullまたは他の配列をポイントするのではなく、配列オブジェクトは、内部的に変更することができます。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=319062&siteId=1