使用 return 方法交换连续索引中的值

swapping values in contiguous indices using return method

我正在尝试将偶数位置的值与奇数位置的值交换。 我必须使用 Call 语句获取输出然后 return 然后使用 toString() 来显示结果。 例如:输入 = 5,1,4,0 输出= 1,5,0,4

您可以通过一个简单的循环来完成此任务,如下所示:

public static void main(String[] args) {
    int array2[] = new int[] { 5, 1, 4, 0 };
    int[] swap = getSwap(array2);
    System.out.println("Swapped array is " + Arrays.toString(swap));

  }

  public static int[] getSwap(int[] input) {
    for (int i = 0; i < input.length - 1; i += 2) {
      int temp = input[i];
      input[i] = input[i + 1];
      input[i + 1] = temp;
    }
    return input;
  }

,输出

Swapped array is [1, 5, 0, 4]

当您提供这样的示例时,查看(不正确的)输出会很有帮助。不过,我相信我能看出问题所在。

首先,您似乎对数组在 Java 中的工作方式有点困惑。除非您显式创建新数组,否则不会复制数组。在您的 main 函数中,您有两个 int[] 变量,array2swapp。但是,这些都是对同一个数组的引用!如果您打印每一个(在调用 getSwap 之后),您会发现它们具有相同的内容。

如果您想要的是传入数组的 副本,并且交换了 even/odd 元素,那么您需要创建一个新数组。可以这样做:

int[] outputArray = new int[inputArray2.length];

其次,您似乎混淆了 even/odd locations 和 even/odd elements。事实上,我认为你两者都在做?如果您要交换 even/odd 位置,您绝对不需要 if(inputArray2[i]% 2 ==1) 行。该行将检查 元素 是偶数还是奇数。

第三,老实说,您似乎在扔掉代码,希望 某些东西 能起作用。一般来说,在编程时,最好的做法是先解决问题,再编写代码。在这种情况下,您需要先决定如何交换数组的 even/odd 位置。我认为你还没有这样做。但是,你非常接近! if 语句中的代码在正确的轨道上。

我鼓励您坐下来尝试自己解决问题,以及我目前列出的想法。但是,如果您遇到困难,请随时查看我的想法

以下是解决方案的简要介绍:

public static int[] getSwap(int[] input) {
    int[] output = new int[input.length];
    for (int i = 0; i + 1 < input.length; i += 2) {
        int j = i + 1;
        output[i] = input[j];
        output[j] = input[i];
    }
    return output;
}