这就是我需要做的事情
能够在不使用其他临时数组的情况下反转可变大小的单维数组的内容。
给定一个整数,数字的单维数组,编写Java代码以在不使用临时数组存储反转内容的情况下就地反转数字内容。 例如,如果数字是{12,34,50,67,88},则提供将改变数字的代码,使其内容现在变为{88,67,50,34,12}。
这就是我拥有的 它无法正常工作。
public static int[] reverseArrayWithoutTempArray(int[] array) {
double array [ ];
array = new double [10];
int [ ] num = {12, 34, 50, 67, 88};
int i = 0;
int j = a.length - 1;
for (i = 0; i < a.length / 2; i++, j—){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
return array;
}
答案 0 :(得分:3)
它实际上对您提供的示例正常工作。这就是我的代码的样子:
public static int[] reverseArrayWithoutTempArray(int[] a) {
int i = 0;
int j = a.length - 1;
for (i = 0; i < a.length / 2; i++, j--){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
return a;
}
答案 1 :(得分:1)
就是这样:
public static void reverseArrayWithoutTempArray(int[] num) {
int j = num.length - 1;
for (int i = 0; i < num.length / 2; i++, j --){
int temp = num[i];
num[i] = num[j];
num[j] = temp;
}
}
调用此方法将如下:
int [] num = {12, 34, 50, 67, 88};
reverseArrayWithoutTempArray(num);
System.out.println(Arrays.toString(num)); //to log
答案 2 :(得分:1)
你的基本算法是正确的,但是你的代码完全混乱。
array
被声明两次,一次作为方法参数,一次作为局部变量。摆脱本地参考。num
被忽略,不需要任何方式,摆脱它。j—
应该是j--
答案 3 :(得分:0)
如果这不是课程作业,您可以使用ArrayUtils.reverse
。
答案 4 :(得分:0)
这有用吗? (交换方法没有实现,但你知道怎么做,对吗?)
public static void reverseIntArray(int[] input) {
final int last = input.length - 1;
if (last < 0) {
return;
}
for (int i = 0; i < input.length / 2 + 1; i++) {
if (last - i <= i) {
return;
}
swap(input, i, last - i);
}
}
答案 5 :(得分:0)
假设您知道如何实现swap
,则以下内容会反转数组的一部分:
public void reverse(int[] a, int low, int hi) {
while (low < hi) {
swap(low++, hi--, a);
}
}
然后,您可以通过调用reverse(a, 0, a.length - 1)
来反转整个数组。