我试图创建一个接收数组然后以相反方式返回该数组的方法。我写的代码反过来返回数组,但是,前两个值现在为0.任何人都知道我做错了什么?
public static int[] reverse(int[] x)
{
int []d = new int[x.length];
for (int i = 0; i < x.length/2; i++) // for loop, that checks each array slot
{
d[i] = x[i];
x[i] = x[x.length-1-i]; // creates a new array that is in reverse order of the original
x[x.length-1-i] = d[i];
}
return d; // returns the new reversed array
}
答案 0 :(得分:5)
您正在将未初始化数组d
中的值分配给x
- 这是零的位置(Java中int
的默认值) )来自。
IIUC,你正在混合两种逆转策略。
如果您要创建新阵列,则无需运行原始阵列的一半以上,而是超过所有:
public static int[] reverse(int[] x) {
int[] d = new int[x.length];
for (int i = 0; i < x.length; i++) {
d[i] = x[x.length - 1 -i];
}
return d;
}
或者,如果你想要反转数组到位,你就不需要一个临时数组,只需要一个变量(最多 - 还有一些方法可以切换两个{{ 1}}没有额外的变量,但这是一个不同的问题):
int
答案 1 :(得分:2)
这是一个简短的方法。
public static int[] reverse(int[] x)
{
int[] d = new int[x.length]; //create new array
for (int i=x.length-1; i >= 0; i--) // revered loop
{
d[(x.length-i-1)]=x[i]; //setting values
}
return d; // returns the new reversed array
}
答案 2 :(得分:0)
它的简单错误;你正在应对x中的反转数据;并返回d。如果您将返回x,您将获得完整的尊敬数据。
d[i] = x[i]; // you are copying first element to some temp value
x[i] = x[x.length-1-i]; // copied last element to first; and respective...
x[x.length-1-i] = d[i]; // copied temp element to first element; and temp elements are nothing but array d
所以最终你在x中创建了受尊敬的数组,而不是在d中。如果你将返回x,你得到了你的答案。而d只是半烤;因此,对于alwaysign half数组,您的默认值为0。 :)