2016-03-11 186 views
0

我可以通過遞歸方法逆陣列,例如: 陣列= {1,2,3,4,5} arrayresult = {5,4,3,2 ,1} 但我的結果是一樣的陣列,我不知道爲什麼,請幫助我。逆陣列(爪哇)// Invertir陣列(爪哇)

public class Recursion { 
public static int arrayReverse(int [] array, int indice, int pos){ 
    if(indice>=0 && pos<array.length){ 
     int tmp = array[pos]; 
     array[pos]=array[indice]; 
     array[indice]=tmp; 
     arrayReverse(array, indice-1, pos+1); 
    } 
    return array[array.length-1]; 
} 

public static void arrayReverse(int [] array){ 
    arrayReverse(array, array.length-1, 0); 
} 

} 類爲主,分別是陣列

import java.util.Arrays; 

public class Main { 
/** 
* Prueba el método Recursion.arrayReverse 
* @param input - array a tratar 
* @param expected - resultado esperado 
*/ 
static void test(int[] input, int[] expected) { 
    // Se informa del caso que se está probando 
    System.out.println("probando: arrayReverse(" + Arrays.toString(input) + ")"); 

    // Llamada al método a probar 
    Recursion.arrayReverse(input); 

    // Comprobación de los resultados 
    if (!Arrays.equals(input, expected)) { 
     System.out.print(">> Resultado erróneo, deberia ser: " + Arrays.toString(expected) + ""); 
     System.out.println(" y es: " + Arrays.toString(input) + ""); 
    } else { 
     System.out.println(">> Resultado correcto: " + Arrays.toString(input) + ""); 
    }   
} 

/** 
* Invoca a test para realizar múltiples pruebas 
* @param args 
*/ 
public static void main(String[] args) { 
    int[] v1 = {1, 2, 3, 4, 5}; 
    int[] v2 = {5, 4, 3, 2, 1}; 
    test(v1, v2); 

} }

回答

2

提示:你交換的元素 - 這意味着你只需要通過一半迭代該陣列的...

+0

非常感謝你!我現在可以解決我的問題! –

1

您需要更改

public static int arrayReverse(int [] array, int indice, int pos){ 
    if(indice>=0 && pos<array.length){ 

喜歡的東西

public static int arrayReverse(int [] array, int indice, int pos){ 
    if(indice>=0 && pos<(array.length/2)){ 

否則你扭轉上半年,然後反向回。

1
static class Recursion { 

    private static void arrayReverse(int[] array, int indice, int pos) { 
     if (indice > pos) { // change 
      int tmp = array[pos]; 
      array[pos] = array[indice]; 
      array[indice] = tmp; 
      arrayReverse(array, indice - 1, pos + 1); 
     }   
    } 

    public static void arrayReverse(int[] array) { 
     arrayReverse(array, array.length - 1, 0); 
    } 
} 

測試

zero elements: [] --> [] 

single element: [1] --> [1] 

even# elements: [1,2] --> [2,1] 

odd# elements: [1,2,3] --> [3,2,1]