反转数组

时间:2012-01-06 13:45:20

标签: java

我编写了反转整数数组的代码。代码如下所示:

public class ReverseArray {

    public static void main(String[] args) {
        try {
            int[] arr = new int[5];
            arr[0] = 1;
            arr[1] = 2;
            arr[2] = 3;
            arr[3] = 4;
            arr[4] = 5;
            for (int i = 0; i <= arr.length/2; i++)
                int temp = arr[0];
                arr[0] = arr[arr.length - i - 1];
                arr[arr.length - i - 1] = temp;
            }
            System.out.println(arr);

        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

但它并没有扭转数组......我正在接受输出。

 [I@3bad086a

我认为我的逻辑没有任何问题。

11 个答案:

答案 0 :(得分:7)

即将引用打印到数组中 如果一次打印出一个元素,你会看到反转的数组。

编辑: 还有两点。

  1. 当您打算使用arr[0]时,您正在使用arr[i]
  2. 更加阴险:你正在迭代太多。您只需要迭代arr.length / 2。由于这是一个家庭作业问题,我留给你找出原因;尝试打印中间结果并解释它们。

答案 1 :(得分:6)

一个好东西:

System.out.println(Arrays.toString(arr));

答案 2 :(得分:3)

你需要遍历数组来打印它

for (int i = 0; i <arr.length; i++) {
            System.out.println(arr[i]);
        }

首先,我会让上面的代码保留(这是错误的(ArrayIndexOutOfBoundsException),现在我相信你对我投票不错了)

public class ReverseArray {    
    public static void main(String[] args) {
        try {
            int[] arr = new int[5];
            arr[0] = 1;
            arr[1] = 2;
            arr[2] = 3;
            arr[3] = 4;
            arr[4] = 5;
            for (int i = 0; i <= arr.length/2; i++){            
                int temp = arr[i];
                arr[i] = arr[arr.length - i - 1];
                arr[arr.length - i - 1] = temp;
                }
                for (int i = 0; i <= arr.length -1 ; i++){ 
                    System.out.println(arr[i]);
                    }                
            }          
         catch (Exception e) {
            System.out.println(e);
        }
    }
}

目前,我将提出一些简单的建议

  1. for循环周围缺少{}。
  2. 而不是遍历整个数组,你只需要经过它的一半,所以arr.length / 2

答案 3 :(得分:3)

您应该使用Arrays.toString(arr)。 数组没有toString()的具体实现,因此调用它会导致Object的默认toString实现。在Java5中,为数组添加了toString功能,作为Arrays类中的静态方法。我想由于向后兼容性的考虑,它没有被直接添加到数组中。

顺便说一下,你的代码中有一个小错误。我相信你想交换索引length-i-1i(不是0)中的值。

答案 4 :(得分:1)

您需要打印数组的内容而不是数组本身。尝试使用循环迭代数组并一次打印一个int。

答案 5 :(得分:1)

使用以下内容打印数组

for (int i = 0; i <arr.length; i++) {
               System.out.println(arr[i]);
            }

而不是

System.out.println(arr);

答案 6 :(得分:1)

只做

for (int i = 0; i <arr.length; i++) {
    System.out.println(arr[i]);
}

答案 7 :(得分:1)

您正在打印

System.out.println(arr);

这将打印变量arr的内存位置。

你应该试试

for(int i=0;i<arr.length;i++)
System.out.println(arr[i]);

答案 8 :(得分:1)

关于打印阵列,以前的几个答案是正确的。但是,您的代码仍然无效。您需要在循环中将arr[0]替换为arr[i]

答案 9 :(得分:0)

在Java中反转数组的一些最简单的方法。

package reversearray;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

final public class Main
{
    private Object reverseArray(Object[]arr)[]
    {
        List<Object>list=Arrays.asList(arr);
        Collections.reverse(list);
        return(list.toArray());
    }

    public static void main(String... args)
    {
        Object[] arr ={1, 2, 3, 4, 5};
        arr=new Main().reverseArray(arr);        

        int newArray[]=new int[arr.length];  //Array of your desired type.

        for(int i=0;i<arr.length;i++)
        {
            newArray[i]=Integer.valueOf(arr[i].toString());
        }

        for(int i=0;i<arr.length;i++)
        {
            System.out.println(newArray[i]);
        }
    }
}

您只需使用Commons.Lang,如下所示。

ArrayUtils.reverse(int[] arr)

使用guava

Collections.reverse(Ints.asList(arr));

答案 10 :(得分:-1)

来自我对C的有限召回

for i = (length( array ) -1 ) to 0
  { print( array( i ) ; i-- }

注意:您计算的是ELEMENTS而不是BYTES 另外:你从长度中减去1,因为你倒数到零而不是1