为什么这不起作用,但当我将for循环从main方法移动到反向方法时呢?
public class ReverseArray
{
public static void main(String[] args)
{
int[] list = {1, 2, 3, 4, 5};
reverse(list);
for (int i = 0; i < list.length; i++)
{
System.out.print(list[i] + " ");
}
}
public static void reverse(int[] list)
{
int[] temp = new int[list.length];
for (int i = 0; i < list.length; i++)
{
temp[i] = list[(list.length - 1) - i];
}
list = temp;
}
}
答案 0 :(得分:2)
因为您无法从方法更新调用者数组引用(并且您不需要)。而是在列表中间迭代并使用像
这样的位置交换每个元素public static void reverse(int[] list) {
for (int i = 0; i < list.length / 2; i++) {
int t = list[(list.length - 1) - i];
list[(list.length - 1) - i] = list[i];
list[i] = t;
}
}
此外,您可以使用Arrays.toString(int[])
打印数组
public static void main(String[] args) {
int[] list = { 1, 2, 3, 4, 5 };
reverse(list);
System.out.println(Arrays.toString(list));
}
输出
[5, 4, 3, 2, 1]
答案 1 :(得分:1)
list
方法中的变量reverse
仅在方法的生命周期内存在。您需要返回新的反向列表并将其分配给变量(例如下面的代码),或者修改原始列表本身(Elliott Frisch的回答)。
public class ReverseArray {
public static void main(String[] args) {
int[] list = {1, 2, 3, 4, 5};
list = reverse(list);
for (int i = 0; i < list.length; i++) {
System.out.print(list[i] + " ");
}
}
public static int[] reverse(int[] list) {
int[] temp = new int[list.length];
for (int i = 0; i < list.length; i++) {
temp[i] = list[(list.length - 1) - i];
}
return temp;
}
}
答案 2 :(得分:0)
你应该从你的方法中返回一个值,即
public static int[] reverse(int[] list) {
...
return temp;
}
并在主...
list = reverse(list);
而不是
reverse(list);
答案 3 :(得分:0)
因为您正在更改方法内部的列表反向。相反,您应该返回更新的列表,如示例中所示,或更新原始列表本身
public static void main (String[] args) throws java.lang.Exception
{
int[] list = {1, 2, 3, 4, 5};
list=reverse(list);
for (int i = 0; i < list.length; i++)
{
System.out.print(list[i] + " ");
}
}
public static int[] reverse(int[] list)
{
int[] temp = new int[list.length];
for (int i = 0; i < list.length; i++)
{
temp[i] = list[(list.length - 1) - i];
//list[i]=temp[i];
}
list = temp;
return list;
}