此方法中的错误或错误

时间:2012-04-19 14:31:16

标签: java testing

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

以下是代码:

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

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

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

此外,我假设因为for循环将始终执行,所以没有不会执行错误的测试用例。

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分: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 + ")");
    }
}

另一个“小”错误就是条件的完成方式。而不是检查奇数正面,寻找正面奇数会稍快一些。这只是因为更容易检查一个数字是否为正数而不是得到其余部分。


<强>资源:

答案 2 :(得分:0)

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

但是,对于奇数,x[i]%2 == 0应该是x[i]%2 == 1

答案 3 :(得分: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;
}
}