public class MaxArrayTest {
public static void main(String[] args) {
int[] list = {1,2,3,4,5};
reverse(list);
for(int i=0;i<list.length;i++){
System.out.print(list[i]+" ");
}
}

public static void reverse(int[] list){
int[] newlist = new int[list.length];
for(int i=0;i<list.length;i++){
newlist[i] = list[list.length-1-i];
list = newlist;

}
}
}

解决方案 »

  1.   

    public static void main(String[] args) {
    int[] list = { 1, 2, 3, 4, 5 };
    int[] reverse = reverse(list);
    for (int i = 0; i < reverse.length; i++) {
    System.out.print(reverse[i] + " ");
    }
    } public static int[] reverse(int[] list) {
    int[] newlist = new int[list.length];
    for (int i = 0; i < list.length; i++) {
    newlist[i] = list[list.length - 1 - i];
    }
    return newlist;
    }这样改就好了  
    int[] list = {1,2,3,4,5};
    reverse(list);  这里传进去一个副本
    for(int i=0;i<list.length;i++){   这里的list 还是int[] list = {1,2,3,4,5};
    System.out.print(list[i]+" ");
    }
      

  2.   

    java中的引用是不会向外传递的。
    你在执行reverse方法时,将list传递进去,此时传递的是list的引用的副本,也就是将list的内存地址存入局部变量区中。
    后面,你再list=newlist时,此时是将局部变量区中的list引用改成newlist,所以并不会对main方法里的list的引用产生更改。但是,你可以通过方法返回值来将局部变量区的list引用返回到main中,以下是示例: public static void main(String[] args) {
    int[] list = { 1, 2, 3, 4, 5 };
    list = reverse(list); //此处接收reverse返回的list引用,并且覆盖
    for (int i = 0; i < list.length; i++) {
    System.out.print(list[i] + " ");
    }
    } public static int[] reverse(int[] list) {
    int[] newlist = new int[list.length];
    for (int i = 0; i < list.length; i++) {
    newlist[i] = list[list.length - 1 - i];
    list = newlist; }

    return list;//此处返回新的list引用
    }
      

  3.   

    你的代码逻辑也有一点问题,,,你在for循环内部更新list引用,下次再用list[i]的话,访问的就是newlist[i]了,就不对了。
    下面是修正的代码:public static void main(String[] args) {
    int[] list = { 1, 2, 3, 4, 5 };
    list = reverse(list); //此处接收reverse返回的list引用,并且覆盖
    for (int i = 0; i < list.length; i++) {
    System.out.print(list[i] + " ");
    }
    } public static int[] reverse(int[] list) {
    int[] newlist = new int[list.length];
    for (int i = 0; i < list.length; i++) {
    newlist[i] = list[list.length - 1 - i];
    //list = newlist; }

    return newlist;//此处返回新的list引用
    }
      

  4.   

    数组是引用数据类型,传递的是数组真正的地址的拷贝,可以对其数据进行直接的修改。。你的代码没有对它进行修改而是创建了一个新的数组,最后这份拷贝指向了这个新的数组。。对原来的数组没有进行修改你可以不用返回。对它进行直接的修改public class ArrayTest { public static void main(String[] args) {
    int[] list = {1,2,3,4,5};
    reverse(list);
    for(int i=0;i<list.length;i++){
    System.out.print(list[i]+" ");
    }
    } public static void reverse(int[] list){
    for (int i = 0; i < list.length/2; i++) {
    int temp=0;
    temp=list[i];
    list[i]=list[list.length-i-1];
    list[list.length-i-1]=temp;
    }
    }
    }