テストメソッド
テストメソッドを使いプログラムを実行させたいのですが、テストメソッドにエラーが出て正常にプログラムが動くかどうか調べられません。
問題は、配列0の数字を、int型のnumShiftsで与えられた数字の回数だけ一番後ろへ移動させ、それ以外の配列の数字を左へシフトさせます。
つまり、一度配列0の中身を一番後ろに持っていくと、配列1の数字が配列0にくるので、それをまた一番後ろにもって行きます。
そしたら配列2の数字が配列0に来ます。それをまた一番後ろにもって行きます。それをnumShifts回繰り返します。
例)
({1,2,3,4,5,6,7}, 3) 3回移動→ {4,5,6,7,1,2,3}
({1,2,3,4,5,6,7}, 0) 0回移動→ {1,2,3,4,5,6,7}
({1,2,3}, 5) 5回移動→ {3,1,2}
プログラムは以下のように組みました。
public class ArrayFun {
public void shiftNTimes(int[] array, int numShifts) {
for (int i = 0; i < numShifts; i++) { //numShifts回繰り返す
for (int j = 0; j < array.length-1; j++) { //配列をシフト
int temp = array[j+1];
array[j+1] = array[j];
array[j] = temp;
}
}
}
}
テストメソッドは以下です。
import static org.junit.Assert.*;
import org.junit.Test;
public class ArrayFunTest {
@Test
public void testshiftNTimes() {
ArrayFun af = new ArrayFun();
int[] a1 = { 1, 2, 3, 4, 5, 6, 7 };//元の配列
int[] a2 = { 1, 2, 3, 4, 5, 6, 7 };//元の配列
int[] a3 = { 1, 2, 3 };//元の配列
int[] a4 = { 4, 5, 6, 7, 1, 2, 3 };//シフト後の配列
int[] a5 = { 1, 2, 3, 4, 5, 6, 7 };//シフト後の配列
int[] a6 = { 3, 1, 2 };//シフト後の配列
assertEquals(a4, af.shiftNTimes(a1, 3));
assertEquals(a5, af.shiftNTimes(a2, 0));
assertEquals(a6, af.shiftNTimes(a3, 5));
}
}
エラーは、assertEqualsに赤線が出てしまうことです。
このタイプのAssertでのassertEquals(Object, Object)は、(int[], void)に適切ではないと表示されます。
他のテストメソッドではこのようなエラーは出ないのですが・・・。どなたか解決方法をご存知であれば宜しくお願いします。
お礼
たいへんご丁寧な回答、ありがとうございました。 聞いてないことにまで答えてくださって。。。 非常に参考になりました!