我想要反转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
答案 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]);
}