指定された数値の配列内のすべての値をシフトしようとしています。たとえば、1 シフトの配列 {1,2,3,4,5} は {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;
正しいですよね?デバッガーでさえ、正しく変更されたと言っています...では、最初の実装ではテストが失敗するのに、2番目の実装では失敗しないのはなぜですか?