0

我正在修改软件测试考试。其中一个问题给出了这种方法,并要求识别故障并产生一个不执行故障的测试用例(如果存在)。

这是代码:

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;
}

我发现了两个问题。一个是 i 在 for 循环中被初始化为 1,因此 x[0] 没有得到测试。也x[i] % 2 == 0应该是x[i] != 0

这些问题是故障还是错误?我问这个是因为这个问题看起来似乎只有一个错误。

另外,我假设因为总是会执行 for 循环,所以没有不会执行错误的测试用例。

4

4 回答 4

4

实际上x[i] % 2 == 0应该是x[i] % 2 != 0(如果我们想检测数值和正数值。现有代码将检测数值)。

测试用例只是{ -2 }- 这个元素是偶数和负数,所以不应该被计算在内,0即使它有错误,该方法也会返回。{ 1 }也会给0,这是错误的。

于 2012-04-19T14:37:02.303 回答
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 + ")");
    }
}

另一个“小”故障是条件完成的方式。而不是检查奇数正数,寻找正数奇数会稍微快一些。这只是因为检查一个数字是否为正比获取其余数更容易。


资源:

于 2012-04-19T14:38:47.490 回答
0

据我了解,您的假设是正确的。应该测试数组的第一个位置,因此i[0]您指出了。

但是,x[i]%2 == 0应该改为x[i]%2 == 1用于奇数。

于 2012-04-19T14:39:21.053 回答
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 回答