我正在修改软件测试考试。其中一个问题给出了这种方法,并要求识别故障并生成一个不执行故障的测试用例(如果存在)。
以下是代码:
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循环将始终执行,所以没有不会执行错误的测试用例。
答案 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;
}
}