【问题标题】:Swapping first array element with last, second with second last and so on将第一个数组元素与最后一个交换,第二个与倒数第二个交换,依此类推
【发布时间】:2021-04-03 15:12:08
【问题描述】:

我有一个数组,我必须将第一个值与最后一个交换,第二个与倒数第二个交换,依此类推。

我试过像下面的代码那样做,但它只工作了一半,用零替换另一半。有人可以解释一下这里出了什么问题吗?

for (i = 0; i < arr.length; i++) {
    temp = arr[i];
    arr[i] = arr[arr.length - 1 - i];
    arr[arr.length - 1 - i] = temp;
}

【问题讨论】:

    标签: java arrays reverse


    【解决方案1】:

    如果你想反转整个数组,你可以在下面做,但是 java 中的 Collections 类也可以做到。您可能想使用第二个数组,请查看以下示例

    String arr[] = {"1", "2", "3", "4", "5"};
    String temparr[] = new String[arr.length];
    System.out.println(Arrays.toString(arr));
    for (int i = 0; i < arr.length; i++) {
        temparr[i] = arr[arr.length - i - 1];
    }
    System.out.println(Arrays.toString(temparr));
    

    【讨论】:

      【解决方案2】:

      正确的做法是从头到尾遍历这个数组并交换元素ilength-i-1,即。 e.第一个和最后一个,第二个和最后一个,依此类推:

      int[] arr = {1, 4, 6, 5, 23, 3, 2};
      
      IntStream.range(0, arr.length / 2).forEach(i -> {
          int temp = arr[i];
          arr[i] = arr[arr.length - i - 1];
          arr[arr.length - i - 1] = temp;
      });
      
      System.out.println(Arrays.toString(arr));
      // [2, 3, 23, 5, 6, 4, 1]
      

      如果您继续从中间迭代到末尾,则将它们交换回来:

      IntStream.range(arr.length / 2, arr.length).forEach(i -> {
          int temp = arr[i];
          arr[i] = arr[arr.length - i - 1];
          arr[arr.length - i - 1] = temp;
      });
      
      System.out.println(Arrays.toString(arr));
      // [1, 4, 6, 5, 23, 3, 2]
      

      另见:
      Is there any other way to remove all whitespaces in a string?
      Is there a way to reverse specific arrays in a multidimensional array in java?

      【讨论】:

        【解决方案3】:

        您有正确的想法,但是您正在遍历整个数组,因此您切换了第一个和最后一个元素,然后在到达最后一个元素时再次返回(并且对于每对切换的元素都有相同的问题元素)。当你到达一半时你应该停止循环:

        for (i = 0; i < arr.length / 2; i++) { // Here!
             temp = arr[i];
             arr[i]  = arr[arr.length - 1 - i];
             arr[arr.length - 1 - i] = temp;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-11-16
          • 2022-11-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-14
          • 1970-01-01
          相关资源
          最近更新 更多