一种在数组中的两个索引之间交换位置的方法
A method that swaps places between two indexes in an array
我刚刚创建了一个方法,用于交换数组中索引[0] 和索引[1] 之间的位置。
但是我似乎无法找到我应该如何 return 将其添加到主要方法,然后按交换顺序将其打印出来。
我做错了什么?
public class Uppgift4_6a {
public static void main(String[] args) {
int [] intArray= new int [] {2, 4};
int l= intArray[0];
int r= intArray[1];
System.out.println("right order:" + l + " " + r);
exchange(intArray, intArray[0], intArray[1]);
System.out.println("right order:" + l + " " + r);
}
public static void exchange (int[] intArray, int l, int r){
l = intArray[0];
r = intArray[1];
intArray[1] = l;
intArray[0] = r;
return;
}
}
您可以使用:
public static int[] exchange(int[] intArray, int l, int r) {
// ^^---------------return type
....
return intArray;//<<---------return your result array
}
要打印数组,您可以使用 Arrays.toString
:
System.out.println(Arrays.toString(exchange(intArray, intArray[0], intArray[1])));;
或者您可以将结果分配给另一个数组,例如:
int[] result = exchange(intArray, intArray[0], intArray[1]);
System.out.println(Arrays.toString(result));
输出
right order:2 4
[4, 2]
right order:2 4
你为什么想要 return 东西?当您传递对对象的引用时,数组将被更新。 但是,l
和r
不会更新。
就这样打印出来
System.out.println("right order:" + l + " " + r);
exchange(intArray, intArray[0], intArray[1]);
System.out.println("right order:" + intArray[0] + " " + intArray[1]);
你的问题是误解:
exchange(intArray, intArray[0], intArray[1]);
一点也不影响你的变量 l 和 r!它更新 intArray
;但不是 intArray[0]
的原始值。 1 评估为!
意思是:重复使用相同的变量名并不会神奇地将这些变量变成"one"。有 两个 个名为 l 的变量。一种存在于 main()
,一种存在于 exchange()
。另一个需要理解的核心内容:Java 确实 按值调用 ;但这意味着:当将 array 传递给方法时,对参数的更改对调用者是 visible。
但是当传递原始类型如 int 时,调用者 看不到 更新。有关所有详细信息,请参阅 here。
您的数组已更新。但是,您缺少用于打印更新数组的打印语句。
System.out.println("right order:" + intArray[0] + " " + intArray[1]);
编辑 1:我建议您勾勒出数组的内存模型,以及交换方法如何使用它,这样一切都会变得非常简单。请记住 Java 按包括引用在内的值传递,并且该数组是一个引用。
我刚刚创建了一个方法,用于交换数组中索引[0] 和索引[1] 之间的位置。
但是我似乎无法找到我应该如何 return 将其添加到主要方法,然后按交换顺序将其打印出来。
我做错了什么?
public class Uppgift4_6a {
public static void main(String[] args) {
int [] intArray= new int [] {2, 4};
int l= intArray[0];
int r= intArray[1];
System.out.println("right order:" + l + " " + r);
exchange(intArray, intArray[0], intArray[1]);
System.out.println("right order:" + l + " " + r);
}
public static void exchange (int[] intArray, int l, int r){
l = intArray[0];
r = intArray[1];
intArray[1] = l;
intArray[0] = r;
return;
}
}
您可以使用:
public static int[] exchange(int[] intArray, int l, int r) {
// ^^---------------return type
....
return intArray;//<<---------return your result array
}
要打印数组,您可以使用 Arrays.toString
:
System.out.println(Arrays.toString(exchange(intArray, intArray[0], intArray[1])));;
或者您可以将结果分配给另一个数组,例如:
int[] result = exchange(intArray, intArray[0], intArray[1]);
System.out.println(Arrays.toString(result));
输出
right order:2 4
[4, 2]
right order:2 4
你为什么想要 return 东西?当您传递对对象的引用时,数组将被更新。 但是,l
和r
不会更新。
就这样打印出来
System.out.println("right order:" + l + " " + r);
exchange(intArray, intArray[0], intArray[1]);
System.out.println("right order:" + intArray[0] + " " + intArray[1]);
你的问题是误解:
exchange(intArray, intArray[0], intArray[1]);
一点也不影响你的变量 l 和 r!它更新 intArray
;但不是 intArray[0]
的原始值。 1 评估为!
意思是:重复使用相同的变量名并不会神奇地将这些变量变成"one"。有 两个 个名为 l 的变量。一种存在于 main()
,一种存在于 exchange()
。另一个需要理解的核心内容:Java 确实 按值调用 ;但这意味着:当将 array 传递给方法时,对参数的更改对调用者是 visible。
但是当传递原始类型如 int 时,调用者 看不到 更新。有关所有详细信息,请参阅 here。
您的数组已更新。但是,您缺少用于打印更新数组的打印语句。
System.out.println("right order:" + intArray[0] + " " + intArray[1]);
编辑 1:我建议您勾勒出数组的内存模型,以及交换方法如何使用它,这样一切都会变得非常简单。请记住 Java 按包括引用在内的值传递,并且该数组是一个引用。