反向阵列方法不起作用

时间:2014-11-23 23:08:25

标签: java

为什么这不起作用,但当我将for循环从main方法移动到反向方法时呢?

public class ReverseArray
{

    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[] temp = new int[list.length];

        for (int i = 0; i < list.length; i++)
        {
            temp[i] = list[(list.length - 1) - i];
        }

        list = temp;
    }

}

4 个答案:

答案 0 :(得分:2)

因为您无法从方法更新调用者数组引用(并且您不需要)。而是在列表中间迭代并使用像

这样的位置交换每个元素
public static void reverse(int[] list) {
    for (int i = 0; i < list.length / 2; i++) {
        int t = list[(list.length - 1) - i];
        list[(list.length - 1) - i] = list[i];
        list[i] = t;
    }
}

此外,您可以使用Arrays.toString(int[])打印数组

public static void main(String[] args) {
    int[] list = { 1, 2, 3, 4, 5 };
    reverse(list);
    System.out.println(Arrays.toString(list));
}

输出

[5, 4, 3, 2, 1]

答案 1 :(得分:1)

list方法中的变量reverse仅在方法的生命周期内存在。您需要返回新的反向列表并将其分配给变量(例如下面的代码),或者修改原始列表本身(Elliott Frisch的回答)。

public class ReverseArray {
    public static void main(String[] args) {
        int[] list = {1, 2, 3, 4, 5};
        list = reverse(list);

        for (int i = 0; i < list.length; i++) {
            System.out.print(list[i] + " ");
        }
    }

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

答案 2 :(得分:0)

你应该从你的方法中返回一个值,即

public static int[] reverse(int[] list)  {
    ...
    return temp;
}

并在主...

list = reverse(list);

而不是

reverse(list);

答案 3 :(得分:0)

因为您正在更改方法内部的列表反向。相反,您应该返回更新的列表,如示例中所示,或更新原始列表本身

public static void main (String[] args) throws java.lang.Exception
    {

    int[] list = {1, 2, 3, 4, 5};
    list=reverse(list);

    for (int i = 0; i < list.length; i++)
    {
        System.out.print(list[i] + " ");
    }
    }

public static int[] reverse(int[] list)
{
    int[] temp = new int[list.length];

    for (int i = 0; i < list.length; i++)
    {
        temp[i] = list[(list.length - 1) - i];
        //list[i]=temp[i];

    }

    list = temp;
    return list;
}