0

クラス A の isSorted() インスタンス メソッドにはバグがあります。

public class A {
private int[] a;
public A(int[] a) { this.a = a; }

/** Return true if this A object contains an array sorted
* in nondecreasing order; else false. */

  public boolean isSorted() {
    for(int i=1; i<a.length-1; i++) {
    if(a[i] < a[i-1]) return false;
    }
  return true;
  }
}

このバグのために失敗する JUnit テスト メソッド testIsSorted() を記述しますが、バグが修正されるとパスします。( setUp() メソッドが定義されていないと仮定します。) これが答えです。

public void testIsSorted() {
int[] array = {2, 1};
A haha = new A(array);
assertFalse(haha.isSorted);
}

まず第一に、バグはどこにあるのか、見つけられないようです。第二に、 assertTrue(haha.isSorted) であってはなりません。配列が降順であるため assertFalse が渡されるため、 isSorted は false を返し、 assertFalse(false) は true を返しますが、 assertTrue(false) は戻ります間違い。

4

1 に答える 1

0

バグはオンラインにあります

for(int i=1; i<a.length-1; i++) {

配列インデックスは 0 から始まるため、 の定義はではなくであるi必要があります。インデックスは、配列の 2 番目の要素を指します。int i=011

このassertFalseステートメントは、メソッドが指定された配列をisSorted()返すことを確認します。このメソッドは、前のエントリよりも小さいエントリがないことを確認します (逆に、各エントリは前のエントリ以上です)。この例では、 at indexが at index より大きいため、が返されます。したがって、この場合の正しいアサーションです。false{2,1}isSorted()false2011assertFalse

このようにテストすることもできます ( の順序が逆になっていることに注意してくださいarray)。

public void testIsSorted() {
    int[] array = {1, 2};
    A haha = new A(array);
    assertTrue(haha.isSorted());
}
于 2012-12-10T07:18:02.000 に答える