【问题标题】:Using recursive function to reverse the second half of an array使用递归函数反转数组的后半部分
【发布时间】:2017-04-19 11:10:39
【问题描述】:

我是 Java 的初学者。我知道如何打印一个反向数组,但我不知道如何打印它的一半。例如:

原始数组 A = {1,2,3,4,5,6,7,8,9,0}

函数后:

变换数组 A' = {1,2,3,4,5,0,9,8,7,6}

【问题讨论】:

    标签: java arrays recursion reverse


    【解决方案1】:
    private void reverse(int[] ar, int i, int j) {
       if(i>j)
         return;
       else{
         int temp = ar[i];
         ar[i] = ar[j];
         ar[j] = temp;
         reverse(ar, ++i, --j);
       }
    }
    

    从主方法调用reverse(ar, (ar.length/2), ar.length-1)

    【讨论】:

    • 我认为你的代码会很有用,但是当我使用你的代码时,我得到了一个 ArrayIndexOutOfBoundsException,这是怎么回事?
    【解决方案2】:

    尝试以下步骤,

    1. 求数组的长度 - N
    2. 创建另一个大小为 N 的数组
    3. 找到一半 - n
    4. 复制前 n 个元素
    5. break,从last开始(索引到最后一个元素),复制元素直到第n个位置(注意索引指针要递减)

    【讨论】:

      【解决方案3】:

      请大家找到完美的解决方案!!!

      导入阵列和扫描仪包

      public static void main(String[] args) {
      
          Scanner size = new Scanner(System.in);
          System.out.println("Enter Array Size : ");
          int arraySize = size.nextInt();
          
          Scanner data = new Scanner(System.in);
          System.out.println("Enter Array Data : ");
          int arrayData[] = new int[arraySize];
          
          for(int inputLoop = 0; inputLoop < arraySize; inputLoop++) {
              
              arrayData[inputLoop] = data.nextInt();
              
          }
          
          System.out.println("Original Array : " + Arrays.toString(arrayData));
          
          int centerPoint = arrayData.length / 2;
          int endPoint = arrayData.length - 1;
          
          reverse(arrayData, centerPoint, endPoint);
          
          System.out.println("Transformed Array : " + Arrays.toString(arrayData));
          
          data.close();
          size.close();
      
      }
      
      private static void reverse(int[] arrayData, int centerPoint, int endPoint) {
      
          if(centerPoint > endPoint || centerPoint == endPoint) {
              
              return;
              
          }
          else {
              
              arrayData[centerPoint] = arrayData[centerPoint] - arrayData[endPoint];
              arrayData[endPoint] = arrayData[centerPoint] + arrayData[endPoint];
              arrayData[centerPoint] = arrayData[endPoint] - arrayData[centerPoint];
              
              reverse(arrayData, ++centerPoint, --endPoint);
              
          }
          
      }
      

      }

      【讨论】:

        猜你喜欢
        • 2020-05-16
        • 1970-01-01
        • 1970-01-01
        • 2013-02-25
        • 2019-07-23
        • 1970-01-01
        • 1970-01-01
        • 2012-10-20
        相关资源
        最近更新 更多