反向数组(Java)//反转数组(Java)

时间:2016-03-11 23:38:34

标签: java arrays recursion inverse

我可以通过递归方法反转数组,例如: array = {1,2,3,4,5} arrayresult = {5,4,3,2,1} 但我的结果是同一个阵列,我不知道为什么,请帮帮我。

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);
}

} 类main,是数组

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);

} }

3 个答案:

答案 0 :(得分:2)

提示:您正在交换元素 - 这意味着您只需要遍历数组的一半 ...

答案 1 :(得分: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)){

否则你反转前半部分,然后将其反转。

答案 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]