java数组反向不理解逻辑

时间:2017-08-21 03:02:59

标签: java

我试图使用我用来反转数组的代码。我不明白为什么我在控制台中输出[I@7a84639c作为输出。

由于某些原因,为什么这个方法实际上没有将我的反向数组保存到数组中?如果我在x[i]=c[i];的底部添加一个打印件,它会显示相反的数组,但是当我添加一个例如karn[0]的调用时,它表明我的数组实际上没有反转。我想通过坚持我所做的代码来解决这个问题。

import java.util.Arrays;

public class HelloWorld {
  public static void main(String[] args) {


    int[]karn={1,2,3};

    rev(karn);
    System.out.println(karn.toString());
  }


  public static void rev(int[]x){
    int[]c=new int[x.length];

    for(int i=x.length-1;i>-1;i--){
      c[i]=x[i];
      x[i]=c[i];
    }
  }
}

2 个答案:

答案 0 :(得分:2)

rev方法中,您正在使用c的局部变量。因此,此值不会转移到您的main方法。您必须返回数组并将值分配给旧数组:

public static int[] rev(int[]x){
    //Creates new array this array is different from karn and local to the method.
    //nothing outside of this method can see this array.
    int[]c=new int[x.length];

    for(int i = 0; i < c.length; i++){
        //Here is where we are swapping the values by placing the first
        //value at the last spot of the array and so on
        c[c.length - i - 1] = x[i];
    }
    //we must return the new array we made and assign it to karn so our 
    //changes will be saved and seen outside of the method
    return c;
  }

在main方法中,您必须将rev方法的更改分配给karn。您可以指定值并将其显示如下:

karn = rev(karn);

//for each loop
for(int i : karn)
    System.out.println(i);

//traditional for loop
for(int i = 0; i < karn.length; i++)
    System.out.println(karn[i]);

数组没有默认的toString()方法。这就是为什么你可以按照自己的意愿看到数组的值。您需要遍历数组以将其显示到控制台。

答案 1 :(得分:1)

您的初始方法看起来几乎正确,您可以就地或通过副本执行此操作。我发布了一个显示副本的评论,所以我想我可能会就地扩展。我将从一个简单的交换方法开始,比如

private static void swap(int[] x, int i, int j) {
    if (i != j) {
        int t = x[i];
        x[i] = x[j];
        x[j] = t;
    }
}

然后你只需要迭代数组的前半部分,用相同的索引交换每个元素(但是从另一半交换)。像,

public static void rev(int[] x) {
    for (int i = 0; i < x.length / 2; i++) {
        swap(x, i, x.length - i - 1);
    }
}

然后你可以称之为

public static void main(String[] args) throws IOException {
    int[] karn = { 1, 2, 3 };
    rev(karn);
    System.out.println(Arrays.toString(karn));
}

输出

[3, 2, 1]