我必须反转两个数组,这样,它们都有相同的值,但引用不同。
这是我目前的代码。
但是当两个数组都指向相同的程序参数时,如何实现这一点呢?
为什么呢 String[]
参考反转 String[]
值而不是反转程序参数?
例如。如果程序参数 1 2 3 4 5
:
String[] values = 5 4 3 2 1
String[] reference = 1 2 3 4 5
public static void main(String[] args) {
String[] values = changeValues(args);
System.out.println(Arrays.toString(values));
String[] reference = changeReference(args);
System.out.println(Arrays.toString(reference));
if (!testSameValues(values, reference)) {
System.out.println("Error: Values do not match !");
}
if (testSameReference(values, reference)) {
System.out.println("Error: References are the same !");
}
}
public static String[] changeValues(String[] x) {
for (int i = 0; i < x.length / 2; i++) {
String temp = x[i];
x[i] = x[(x.length - 1) - i];
x[(x.length - 1) - i] = temp;
}
return x;
}
public static String[] changeReference(String[] y) {
for (int i = 0; i < y.length / 2; i++) {
String temp = y[i];
y[i] = y[(y.length - 1) - i];
y[(y.length - 1) - i] = temp;
}
return y;
}
public static boolean testSameValues(String[] x, String[] y) {
if (x.equals(y)) {
return true;
} else
return false;
}
public static boolean testSameReference(String[] x, String[] y) {
if (x == y) {
return true;
} else
return false;
}
4条答案
按热度按时间k10s72fa1#
您只需复制反向数组,即可获得两个具有相同内容的不同引用:
另请参见:用last交换第一个数组元素,用second-last交换第二个数组元素,依此类推
v1l68za42#
反向方法只对输入数组进行操作,不创建新数组。编写一个方法来反转
String[]
并返回一个新数组。像这样的然后你可以依次调用它。比如,
我认为您需要两种方法,一种是复制数组,另一种是反转数组。让我们使这些方法成为泛型的,但是为了泛型地复制数组,我们还需要传递类。比如说,
在原地反转数组时,如果在数组中的位置使用两个变量,我会发现更容易读取。比如,
以及
copyReverse
一般来说,复制
String[]
你们两个都可以但如果你用原地踏步
reverse
它修改传入的数组。qrjkbowd3#
克隆阵列:
注意,自从
changeValues
以及changeReference
做同样的事,你可以用changeValues
两者或changeReference
两个都是。数组在内存中的位置基于传入数组的位置,而不是函数名。0md85ypi4#
changereference和changevalues方法执行相同的操作—反转数组。这就是为什么最后会看到相同的输入数组。
要更改引用,需要创建一个新数组,并使用与原始数组相同的元素填充它。
编辑:将数组复制到新数组中