我正在尝试使用给定数字移动数组中的所有值。例如数组 {1,2,3,4,5} 具有 1 个移位必须变为 {5,1,2,3,4}。这是用 JUnit 测试的。
JUnit 测试是这样的:
@Test
public void shift1(){
double[] row = {1.0,2.0,3.0,4.0,5.0};
int amount= 1;
ArrayOperations.shift(row, amount);
Assert.assertEquals(5.0, row [0]);
Assert.assertEquals(1.0, row [1]);
Assert.assertEquals(2.0, row [2]);
Assert.assertEquals(3.0, row [3]);
Assert.assertEquals(4.0, row [4]);
}
我的方法是这样的:
public static void shift(double[] row, int amount) {
double[] newRow= new double[row.length];
for (int i = 0; i < newRow.length; i++) {
newRow[(i + amount) % row.length] = row[i];
}
row= newRow;
}
现在这个测试因任何未知原因而失败。我在编程课上遇到了这个问题,甚至我的老师也没有找到原因。当我调试它时,数组被正确修改,导致 {5,1,2,3,4}。但是JUnit失败了……但是这段代码可以工作:
public static void shift(double[] row, int amount) {
double[] newRow= new double[row.length];
for (int i = 0; i < newRow.length; i++) {
newRow[(i + amount) % row.length] = row[i];
}
for (int i = 0; i < newRow.length; i++) {
row[i] = newRow[i];
}
}
有谁知道为什么?row= newRow;
是正确的吗?甚至调试器都说它已正确更改...那么为什么第一个实现的测试失败,而第二个实现却没有呢?