Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 链式数组值_Java_Arrays_Methods - Fatal编程技术网

Java 链式数组值

Java 链式数组值,java,arrays,methods,Java,Arrays,Methods,我创建了一个名为rowSwitching的方法,用于在数组中的两个特定行上切换数据。然而,当我使用它的时候,虽然我不想存储它,但主节点的数组值也发生了变化 这是我的密码 public class MatrixEx {//implements Matrix { public static void print(int[][] input1, int[][] input2) { System.out.println("------------------ -----------------

我创建了一个名为rowSwitching的方法,用于在数组中的两个特定行上切换数据。然而,当我使用它的时候,虽然我不想存储它,但主节点的数组值也发生了变化

这是我的密码

public class MatrixEx {//implements Matrix {

public static void print(int[][] input1, int[][] input2) {
    System.out.println("------------------ ------------------");
    for (int row = 0; row < input1.length; row++) {
        for (int col = 0; col < input1.length; col++) {
            System.out.format("%4d", input1[row][col]);
        }
        System.out.print("          ");
        for (int col = 0; col < input2.length; col++) {
            System.out.format("%4d", input2[row][col]);
        }
        System.out.println();
    }
    System.out.println("------------------ ------------------");
}

public static void main(String[] args) {

    int[][] input1 = {
        {7, 2, 1},
        {0, 3, -1},
        {-3, 4, -2}
    };

    int[][] input2 = {
        {-2, 8, -5},
        {3, -11, 7},
        {9, -34, 21}
    };

    System.out.format("%12s%4s%12s\n", "input1", " ", "input2");
    print(input1, input2);

    MatrixEx matrixFunc = new MatrixEx();
    print(input1, matrixFunc.rowSwitching(input1, 1, 2));

}

public int[][] rowSwitching(int[][] matrix, int row1, int row2) {
    System.out.format("%12s%4s%12s\n", "Before", " ", "After");
    int[] temp1 = new int[matrix.length];
    int[] temp2 = new int[matrix.length];
    int[][] result = matrix;

    row1 -= 1;
    row2 -= 1;

    for (int i = 0; i < temp1.length; i++) {
        temp1[i] = result[row1][i];
    }

    for (int i = 0; i < temp2.length; i++) {
        temp2[i] = result[row2][i];
    }

    for (int i = 0; i < result.length; i++) {
        result[row1][i] = temp2[i];
    }

    for (int i = 0; i < result.length; i++) {
        result[row2][i] = temp1[i];
    }        
    return result;
}
公共类MatrixEx{//implements MatrixEx{
公共静态无效打印(int[]input1,int[]input2){
System.out.println(“------------------------------------”;
for(int row=0;row
我想将数组值保留在main,但由于某种原因,在我使用该方法后,它会不断变化。

在Java中,任何对象类型(包括数组)都是通过引用传递的。这意味着如果您有一个函数

private void doThings(int[] items) {
  items[0] = 10;
}
你称之为:

int[] myList = new int[3] {1,2,3};
doThings(myList);
System.out.println(myList[0]); // Prints '10'
这是因为
doThings
接收对列表存储在内存中的位置的引用,并更改其实际存储位置-也在
main
中更改它


您可能想重新思考您的程序或

您能给我一些在该程序中复制数组的示例吗?我尝试过,但仍然不起作用(值仍在更改)。我确实想更改程序,但不幸的是,我们必须使用接口,从而限制了我们可以做的事情。我认为如果您更改
int[][]result=matrix;
to
int[]]result=matrix.clone();
Hmm,我尝试了它,但仍然不起作用。不知何故,值引用仍然传递给方法:/i我不知道您希望从程序中得到的输出是什么,因此我无法进一步提供帮助。例如,我有一个3x3数组,其值为:{(1,2,3),(4,5,6),(7,8,9)}.使用rowSwitching方法后,它将显示原始数字(在数组进入该方法之前)和修改后的数组。因此,它将像:{(1,2,3),(4,5,6),(7,8,9)}{(7,8,9),(4,5,6),(1,2,3)}