在Java int数组中交换偶数索引

时间:2019-01-02 14:03:06

标签: java arrays data-structures

我正在尝试根据偶数和奇数索引交换int数组中的数字。 至今, 我能够弄清楚如何定位偶数和奇数索引,但是, 然后由于嵌套的for循环,我无法将所有元素打印在一个数组中。 这是我的代码-

public class SwapIndexes {

    public static void main(String []args) {
        int temp;
        int[] arr = {1, 2, 3, 4, 5, 6};
        for (int j = 0; j < arr.length; j += 2) {
            for (int k = 1; k < arr.length; k += 2) {
                temp = arr[j];
                arr[j] = arr[k];
                arr[k] = temp;
                System.out.print(arr[k]);
            }
        }
    }
}

此代码将124312531作为arr[k]的输出,并将246124312作为arr[j]的输出。我希望输出为

  

2,1,4,3,6,5

2 个答案:

答案 0 :(得分:4)

我真的不明白为什么会有两个循环。您只需要一个,因为只需要浏览一次阵列。这是一个循环的代码:j将具有所有奇数索引,然后切换j-1j
由于没有给出有关具有奇数个元素的数组的行为的规范,因此在这种情况下,它不会修改最后一个值。如果需要,可以引发异常。

public static void main(String []args) {
        int temp;
        int[] arr = {1, 2, 3, 4, 5, 6};
        for (int j = 1; j < arr.length; j += 2) {
                temp = arr[j-1];
                arr[j-1] = arr[j];
                arr[j] = temp;
        }
        System.out.print(Arrays.toString(arr));
}

答案 1 :(得分:0)

好吧,我不知道你为什么要使用两次循环,因为这个想法就在那里。

删除第二个循环,将k设置为j + 1,逻辑就在这里(注释了不需要的代码。

for (int j = 0; j < arr.length; j += 2) {
   //for (int k = 1; k < arr.length; k += 2) {
   int k = j + 1;
       temp = arr[j];
       arr[j] = arr[k];
       arr[k] = temp;
       //System.out.print(arr[k]);
   //}
}
System.out.print(Arrays.toString(arr));

现在,您需要防止由于长度不均匀而导致异常。 我喜欢简单地使用稍微不同的循环:

for (int j = 1; j < arr.length; j += 2) {
   int k = j - 1;
   ...
}
System.out.print(Arrays.toString(arr));

所有您需要做的就是检查是否至少有2个单元格,如果您要反转这样的数组,这很有意义

if(arr.length < 2)
     return;

测试1:

  

{1、2、3、4、5、6}
  [2,1,4,3,6,5]

测试2:

  

{1、2、3、4、5、6、7}
  [2,1,4,3,6,5,7]