无法反转数组中的整数,中途失败

时间:2014-07-16 20:50:08

标签: java arrays int reverse

我想要反转Array'中的整数。我无法弄清楚为什么输出会自行逆转。代码链接 http://ideone.com/REuGYt

class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        int[] s = {4,5,6,7,8};
        for (int x = 0; x < s.length; x++) {
            s[x] = s[(s.length - x) -1];
            System.out.println(s[x]);
        }
    }
}

//outputs 
8
7
6
7
8

4 个答案:

答案 0 :(得分:2)

问题是,当您尝试撤消数据时,您将覆盖数据。因此,当您完成迭代时,您的数据将如下所示

[4,5,6,7,8]
[8,5,6,7,8] //Note that the original 4 is now gone, and can't be recovered
[8,7,6,7,8]
...

你想要做的是:

for(int x = 0; x < s.length/2; x++){
    int temp = s[x];
    s[x] = s[s.length-1-x];
    s[s.length-1-x] = temp;
}

这将一次交换两个元素,这样就不会有任何东西被覆盖和丢失。

答案 1 :(得分:1)

您只是将右侧值复制到左侧值;你没有从双方转换价值。不要只是将右侧复制到左侧,而是交换它们的值。取代

s[x] = s[(s.length - x) -1];

int temp = s[x];
s[x] = s[(s.length - x) -1];
s[(s.length - x) -1] = temp;

此外,在for到达x之前,您需要在数组中途停止s.length/2循环,否则后半部分会将值交换回原始位置。

答案 2 :(得分:1)

试试这个:

    List<Integer> reversed = Arrays.asList(4,5,6,7,8);
    Collections.reverse(reversed);

它将构建一个集合,然后反转它。

答案 3 :(得分:1)

您在迭代时更改数组中的值。当你到达阵列的一半时,你就会开始打印出你之前写过的值。这使它看起来是镜像的。一个修复方法是使用两个数组:

int[] s = {4, 5, 6, 7, 8};
int[] rev = new int[s.length];

for (int x = 0; x < s.length; x++) {
    rev[x] = s[(s.length - x) - 1];
    System.out.println(rev[x]);
}