StackOverflow的大家好! 我使用了searrch选项,我发现了一些相关的答案,但没有一个解释为什么Java中数组反向排序的特定方法不起作用:
class ReverseOrder
{
public static void main(String[] args)
{
int x[] = {1,2,3,4,5};
int y[] = x;
int i, j;
for(i = 0, j = x.length - 1; i < x.length; i++, j--)
{
y[i] = x[j];
}
for(int b = 0; b < x.length; b++)
{
System.out.println("Inverse order is: " + y[b]);
}
}
}
为什么结果是5,4,3,4,5而不是5,4,3,2,1 ???它让我绝对疯狂,对我毫无意义。任何帮助将不胜感激!
答案 0 :(得分:7)
因此: int y [] = x
y和x现在是对同一数组的引用。您应该确保将y初始化为新数组。
答案 1 :(得分:2)
class ReverseOrder {
public static void main(String[] args)
{
int x[] = {1,2,3,4,5};
int y[] = new int[5]; // or you could use [x.length]
int i, j;
for(i = 0, j = x.length - 1; i < x.length; i++, j--)
{
y[i] = x[j];
}
for(int b = 0; b < x.length; b++)
{
System.out.println("Inverse order is: " + y[b]);
}
}
}
答案 2 :(得分:1)
int y[] = x;
使y指向与x相同的数据。
y[i] = x[j];
您也在修改输入数组x。
你希望你完全独立:
int y[] = new int[x.length];
代替。
答案 3 :(得分:1)
如果要反转数组元素的顺序(即直接修改数组x
),可以在数组中途迭代,交换元素:
final int last = x.length - 1;
final int n_2 = x.length / 2; // round down for odd lengths
for (int i = 0; i < n_2; ++i) {
int tmp = x[i];
x[i] = x[last - i];
x[last - i] = tmp;
}