【问题标题】:Can I swap two int[] using swap function in java?我可以在 java 中使用交换函数交换两个 int[] 吗?
【发布时间】:2015-01-18 18:54:54
【问题描述】:

我创建了一个二维数组 int[] 现在,我想在二维数组中交换两个 int[]

我的代码有这个:

swap(values[row][col], values[randomRow][randomCol]); 

其中 values 是 int[] 的二维数组。 所以 values[int][int] 是一个 int[];

我收到如下错误消息:

Error: The method swap(int[], int[]) is undefined for the type ShufflePic

我应该如何解决这个问题?

非常感谢!

【问题讨论】:

  • 看起来values[row][col] 是一个数组。
  • 等等...你有 3d 数组吗?
  • 显示相关代码以重现问题并避免基于猜测的答案。
  • @MarounMaroun 的建议(其他答案没有注意到)是您收到的错误表明 values[row][col] also一个数组,而不是 int。
  • (a) 添加定义 swap 方法的代码。 (b) 使用问题下方的编辑链接添加信息。不要不要创建一个答案作为您问题的扩展。 SO 不是论坛,只应将答案作为答案发布。

标签: java arrays multidimensional-array swap


【解决方案1】:

Java 是 pass-by-value。你不能像这样交换值。

改为使用这种方法:

void swap(int[][] array, int row1, int col1, int row2, int col2) {
    int temp = array[row1][col1];
    array[row1][col1] = array[row2][col2];
    array[row2][col2] = temp;
}

现在您可以调用swap(...) 方法来交换值

swap(values, row, col, randomRow, randomCol);

【讨论】:

    【解决方案2】:

    你的方法应该是这样的

    swap(int[] arryFirst, int arryFirstRow, int arryFirstCol, int[] arrySec, int arrySecRow, int arrySecCol)
    

    【讨论】:

      【解决方案3】:

      基本上,这会根据这些索引找到索引和掉期。交换后尝试打印列表中的项目。当然,这种技术也可以用于 2D 数组,但我将把它留给你一个挑战。

       public class Test {
          static int[] list = {4, 5, 6, 3, 1, 2};
      
          public static void main(String[] args) {
              swap(6, 2); // test swap
          }
      
          public static void swap(int a, int b) {
              int a_index = 0;
              int b_index = 0;
      
              for (int i = 0; i < list.length; i++) {
                  if (list[i] == a) a_index = i;
                  if (list[i] == b) b_index = i;
              }
      
              list[a_index] = b;
              list[b_index] = a;
          }
      }
      

      【讨论】:

        【解决方案4】:

        我创建了一个 int[] 的二维数组

        您确实这样做了,但您可能想创建一个 int 的二维数组,而不是 int[]

        values[row][col] = 5 //2d int array
        values[row][col] = new int[length] //3d int array. Probably not what you intended
        

        一旦你解决了这个问题,其他关于按值传递的答案应该对你有用。

        编辑: 如果这就是你想要的,那么这个方法应该可以工作:

        public void swapArrays(int[][][] arr, int row1, int col1, int row2, int col2) {
            int[] temp = arr[row1][col1];
            arr[row1][col1] = arr[row2][col2];
            arr[row2][col2] = temp;
        }
        

        然后你会调用它:

        swapArrays(values, row, col, randomRow, randomCol);
        

        你得到这个错误的原因是你没有定义一个交换函数来接收两个数组。但是,即使您有,由于按值传递、按引用传递的事情,它也不会正常运行。 (谷歌它以获取更多信息。)

        使用我提出的方法,它将引用整个数组,使其能够更改其值。如果您只是传入values[row][col],该方法将只能看到存储在该索引处的值,但无法访问values 数组。

        【讨论】:

        • 我想创建一个二维数组 int[],而不是 int,所以我可以让我的代码工作:P
        猜你喜欢
        • 2017-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多