0

私はソフトウェアテスト試験のために改訂しています。質問の 1 つは、このメソッドを提供し、障害を特定し、障害を実行しないテスト ケース (存在する場合) を生成するよう求めます。

コードは次のとおりです。

public static int oddOrPos(int[] x) {
  //Effects: if x==null throw NullPointerException
  // else return the number of elements in x that
  // are either odd or positive (or both)
  int count = 0;
  for (int i = 1; i < x.length; i++)
  {
    if (x[i]%2 == 0 || x[i] > 0)
    { 
      count++;
    }
  }
  return count;
}

私は2つの問題を特定しました。1 つは、i が for ループで 1 に初期化されるため、x[0] がテストされないことです。またx[i] % 2 == 0、する必要がありますx[i] != 0

これらの問題は障害ですか、それともエラーですか? 私がこの質問をするのは、その質問が 1 つだけ欠点があるように見えるからです。

また、for ループは常に実行されるため、fault を実行しないテスト ケースはないと仮定します。

4

4 に答える 4

4

実際x[i] % 2 == 0にはそうすべきです(正の値と一緒に奇数x[i] % 2 != 0の値も検出したい場合。既存のコードは代わりに偶数の値を検出します)。

テストケースはただ{ -2 }- この要素は偶数で負であるため、カウントされるべきではなく、メソッドはエラーが0あっても返されます。{ 1 }も与えますが0、これは間違っています。

于 2012-04-19T14:37:02.303 に答える
0

ここで重要なのは、forループが1から始まり、0から始まる必要があるということです。配列の最初の要素は常に見落とされます。また、x [i]%2 == 0は、奇数ではなく偶数に対してtrueを返します。したがって、これをx [i]%2!=0に変更します。

public class test{

public static void main(String[] args){
int[] x = {3, 5, -1, -14}

if( 3 == oddOrPos(x)){
    System.out.println("Working");
else
    System.out.println("Test Fail");

}
public static int oddOrPos(int[] x) {
  //Effects: if x==null throw NullPointerException
  // else return the number of elements in x that
 // are either odd or positive (or both)
 int count = 0;
 for (int i = 0; i < x.length; i++)
 {
   if (x[i]%2 != 0 || x[i] > 0)
{ 
  count++;
}
 }
      return count;
}
}
于 2012-04-19T14:55:19.843 に答える
0

私が理解しているように、あなたの仮定は正しいです。配列の最初の位置をテストする必要があるため、i[0]指摘しました。

ただし、x[i]%2 == 0代わりにx[i]%2 == 1奇数を指定する必要があります。

于 2012-04-19T14:39:21.053 に答える
0

奇数の負の値を検出したい場合は、現在行われているように-1ではなく、探す必要があります0

奇数の正の値の場合は になります1。したがって、基本的には以外のものが 0必要です。

%演算子は剰余演算子であり、モジュロ演算子ではありません。最初に指定された数値が負の場合、負の数値を返します。

class Test1 {
    public static void main(String[] args) {
        int a = 5 % 3;  // 2
        int b = 5 / 3;  // 1
        System.out.println("5%3 produces " + a +
                " (note that 5/3 produces " + b + ")");

        int c = 5 % (-3);  // 2
        int d = 5 / (-3);  // -1
        System.out.println("5%(-3) produces " + c +
                " (note that 5/(-3) produces " + d + ")");

        int e = (-5) % 3;  // -2
        int f = (-5) / 3;  // -1
        System.out.println("(-5)%3 produces " + e +
                " (note that (-5)/3 produces " + f + ")");

        int g = (-5) % (-3);  // -2
        int h = (-5) / (-3);  // 1
        System.out.println("(-5)%(-3) produces " + g +
                " (note that (-5)/(-3) produces " + h + ")");
    }
}

もう 1 つの「小さな」障害は、条件の処理方法にあります。奇数またはをチェックする代わりに、または奇数を探す方がわずかに高速です。余りを取得するよりも、数値が正かどうかを確認する方が簡単だからです。


資力:

于 2012-04-19T14:38:47.490 に答える