【问题标题】:Swapping adjacent numbers in arrays交换数组中的相邻数字
【发布时间】:2023-04-03 08:32:01
【问题描述】:

问题是:编写一个名为 swapPairs 的方法,它接受一个整数数组并交换相邻索引处的元素。也就是说,交换元素 0 和 1,交换元素 2 和 3,依此类推。如果数组的长度为奇数,则最后一个元素应保持不变。例如,在调用您的方法后,列表 {10,20,30,40,50} 应变为 {20,10,40,30,50}。

编写方法 printArray,它传递一个数组并将打印出每个元素。
使用该方法打印swapPairs修改的数组。

这是我的代码:

public static void swapPairs(int[] a){
    int len=a.length;
        if(len%2 ==0){
            for(int i=0; i<len; i=i+2){
                a[i]=a[i+1];
                a[i+1]=a[i];
                int[] b={a[i]+a[i+1]};
            }   
        }
        if(len%2 !=0){
            for(int j=0; j<len; j=j+2){
                a[j]=a[j+1];
                a[j+1]=a[j];
                a[len-1]=a[len-1];
                int[] b={a[j]+a[j+1]+a[len-1]};
            }
        }   
}
public static void printArray(int[] a){
    System.out.println(a);
}

然而,它返回的是 [I@2a139a55

【问题讨论】:

  • 你没有交换任何东西,因为在你的第一个循环中你覆盖了 a[I] 然后使用 a[I] 分配给你复制到 a[I] 的元素,你需要一个临时变量来存储赋值前a[I]的内容再用临时变量赋值给a[I+1]。
  • 一开始你写if(len%2 ==0)。稍后你写if (len%2 !=0)。为什么不只写else那里?

标签: java arrays for-loop


【解决方案1】:
    public static void swapPairs(int[] a){
        int len = a.length - a.length % 2; // if len is odd, remove 1
        for(int i = 0; i < len; i += 2) {
            int temp = a[i];
            a[i] = a[i + 1];
            a[i + 1] = temp;
        }
    }
    
    public static void printArray(int[] a){
        System.out.println(Arrays.toString(a));
    }

    public static void main(String[] args) {
        int[] iArr1 = {10, 20, 30, 40, 50};
        int[] iArr2 = {10, 20, 30, 40, 50, 60};
        swapPairs(iArr1);
        swapPairs(iArr2);
        printArray(iArr1); // [20, 10, 40, 30, 50]
        printArray(iArr2); // [20, 10, 40, 30, 60, 50]
    }

【讨论】:

    【解决方案2】:

    导入 java.util.Scanner; 公共类 SwapEveryPair {

    public static void main(String[] args) {
        Scanner scn = new Scanner(System.in);
        int n = scn.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = scn.nextInt();
    
        }
        for (int i = 0; i < (arr.length - 1); i += 2) {
            int temp = arr[i];
            arr[i] = arr[i + 1];
            arr[i + 1] = temp;
        }
        for(int i=0; i< arr.length; i++){
            System.out.println(" " + arr[i]);
        }
    }
    }``
    

    【讨论】:

    • 欢迎来到stackoverflow。在发布答案之前,您应该问自己这些基本问题:| Is my answer showing a different solution to all the other answers?(交换和打印功能类似于其他多个答案)| Is an answer still relevant to the community?(这个问题是5年前问的) | Is every part of my answer relevant to the question?(您使用扫描仪读取数组,而 OP 明确表示“一种方法 [...] 接受整数数组”。因此获取该数组的方法与问题无关。)
    【解决方案3】:

    我认为这应该可行,

    public static void swapAlternate(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;
        }
    }
    

    【讨论】:

      【解决方案4】:
      final int[] number = new int[] { 1, 2, 3, 4, 5, 6, 7 };
          int temp;
          for (int i = 0; i < number.length; i = i + 2) {
              if (i > number.length - 2) {
                  break;
              }
              temp = number[i];
              number[i] = number[i + 1];
              number[i + 1] = temp;
          }
          for (int j = 0; j < number.length; j++) {
              System.out.print(number[j]);
          }
      

      【讨论】:

      • 为您的答案添加一些解释或评论,例如您所做的更改以及您这样做的原因。
      • 你为什么使用 for 条件ì if 条件i &gt; number.length - 2
      【解决方案5】:
      public static void swapPairs(int[] arr){
          int length = arr.length%2 == 0? arr.length : arr.length-1;
      
          for(int i=0; i<length; i=i+2) {
              int temp = arr[i];
              arr[i] =     arr[i+1];
              arr[i+1] = temp;
          }
          // print the array
          for(int i=0;i<arr.length;i++){
              System.out.print(arr[i]+" ");
          }
      }
      

      【讨论】:

        【解决方案6】:

        在几乎破坏了我的电脑几次之后,这是实际的工作代码:

        public static void swapPairs(int[] a){
            int len=a.length;
                if(len%2 ==0){
                    for(int i=0; i<len; i=i+2){
                        int c=a[i]+a[i+1];
                        a[i]=c-a[i];
                        a[i+1]=c-a[i+1];
                    }   
                }
                if(len%2 !=0){
                    for(int j=0; j<len-1; j=j+2){
                        int c=a[j]+a[j+1];
                        a[j]=c-a[j];
                        a[j+1]=c-a[j+1];
                    }   
                    a[len-1]=a[len-1];
                }   
        }
        public static void printArray(int[] a){
            int len=a.length;
            for(int i=0;i<len;i++)
                System.out.print(a[i]+" ");
        }
        

        【讨论】:

        • 这个方案有点复杂
        【解决方案7】:

        首先,您的交换方法可以简化。将两个数字相加,然后从总和中减去每个数字(得到另一个数字)。类似的,

        public static void swapPairs(int[] a) {
            for (int i = 0; i < a.length - 1; i += 2) {
                int c = a[i] + a[i + 1];
                a[i] = c - a[i];
                a[i + 1] = c - a[i + 1];
            }
        }
        

        然后您可以使用Arrays.toString(int[]) 获得String。喜欢,

        public static void printArray(int[] a) {
            System.out.println(Arrays.toString(a));
        }
        

        我像上面一样测试过

        public static void main(String[] args) {
            int[] t = { 1, 2, 3, 4 };
            printArray(t);
            swapPairs(t);
            printArray(t);
        }
        

        我得到了

        [1, 2, 3, 4]
        [2, 1, 4, 3]
        

        【讨论】:

          【解决方案8】:

          你需要打印的是Arrays.toString(a)

          现在,您只是打印 Array 对象的 Hashcode

          【讨论】:

            猜你喜欢
            • 2019-11-14
            • 2018-02-24
            • 2021-11-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-11-27
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多