谁能发现我犯的错误?
Can anyone spot the error that i am making?
所有测试用例 运行 成功,除了 in1To10(9, true) → false.
问题:
Given a number n, return true if n is in the range 1..10,
inclusive. Unless outsideMode is true, in which case return true if
the number is less or equal to 1, or greater or equal to 10.
in1To10(5, false) → 真
in1To10(11, 假) → 假
in1To10(11, 真) → 真
我的解决方案:-
public boolean in1To10(int n, boolean outsideMode) {
if(n>=1&&n<=10){
return true;
}
else if(outsideMode==true&&(n<=1||n>=10)){
return true;
}else
return false;
}
首先 outsideMode
是一个布尔值所以只写 outisdeMode&&(n<=1||n>=10)
你的错误是
if(n>=1&&n<=10){
return true;
}
将在
之前执行
else if(outsideMode==true&&(n<=1||n>=10))
因为 9 >= 1 && 9 <= 10 这意味着它将 return true
交换它们就可以了
public boolean in1To10(int n, boolean outsideMode) {
if(outsideMode&&(n<=1||n>=10)){
return true;
}
else if(!outsideMode&&n>=1&&n<=10){
return true;
}else
return false;
}
正如您在问题中提到的,return 布尔值基于 outsideMode 的 布尔值和 范围 (1-10) 价值
但在您的程序中,第一个 return 语句值仅由您没有测试 outsideMode 的布尔值的范围标准决定。
1.解决方案:
将第二个 if(condition) 与第一个 if(condition)
交换
public boolean in1To10(int n, boolean outsideMode) {
if((outsideMode==false)&&(n>=1&&n<=10)){
return true;
}
else if(outsideMode==true&&(n<=1||n>=10)){
return true;
}else
return false;
}
2.Solution:
包含与第一个 if(condition) 相同的 outsideMode 与第二个 if(condition)
public boolean in1To10(int n, boolean outsideMode) {
if(outsideMode==true&&(n<=1||n>=10)){
return true;
}
else if(n>=1&&n<=10){
return true;
}else
return false;
}
当您说 "all test cases are running successfully" 时,这是相当误导的,因为您的测试用例太少了。
对于每个有趣的整数比较,您需要 2 个测试用例:一个比较成功,一个比较失败。作为测试数据,您应该选择产生差异的两个整数。例如,如果条件是n > 10
,则应该使用10和11作为测试数据。
在您的场景中,您有一个布尔值,并且在该布尔值的每种情况下,您都有两个整数条件。总而言之,这构成了 2 * 2 * 2 = 8
个测试用例。这比您目前拥有的 3 个测试用例要多得多,但这是必要的。
通过系统地测试您的代码,您将生成比没有这些测试更可靠的代码,即使这需要一些时间。但是在 return 中,您对代码更有信心,这是值得的。
进一步阅读:测试覆盖率、条件覆盖率。
所有测试用例 运行 成功,除了 in1To10(9, true) → false.
问题:
Given a number n, return true if n is in the range 1..10, inclusive. Unless outsideMode is true, in which case return true if the number is less or equal to 1, or greater or equal to 10.
in1To10(5, false) → 真 in1To10(11, 假) → 假 in1To10(11, 真) → 真
我的解决方案:-
public boolean in1To10(int n, boolean outsideMode) {
if(n>=1&&n<=10){
return true;
}
else if(outsideMode==true&&(n<=1||n>=10)){
return true;
}else
return false;
}
首先 outsideMode
是一个布尔值所以只写 outisdeMode&&(n<=1||n>=10)
你的错误是
if(n>=1&&n<=10){
return true;
}
将在
之前执行else if(outsideMode==true&&(n<=1||n>=10))
因为 9 >= 1 && 9 <= 10 这意味着它将 return true
交换它们就可以了
public boolean in1To10(int n, boolean outsideMode) {
if(outsideMode&&(n<=1||n>=10)){
return true;
}
else if(!outsideMode&&n>=1&&n<=10){
return true;
}else
return false;
}
正如您在问题中提到的,return 布尔值基于 outsideMode 的 布尔值和 范围 (1-10) 价值
但在您的程序中,第一个 return 语句值仅由您没有测试 outsideMode 的布尔值的范围标准决定。
1.解决方案: 将第二个 if(condition) 与第一个 if(condition)
交换public boolean in1To10(int n, boolean outsideMode) {
if((outsideMode==false)&&(n>=1&&n<=10)){
return true;
}
else if(outsideMode==true&&(n<=1||n>=10)){
return true;
}else
return false;
}
2.Solution: 包含与第一个 if(condition) 相同的 outsideMode 与第二个 if(condition)
public boolean in1To10(int n, boolean outsideMode) {
if(outsideMode==true&&(n<=1||n>=10)){
return true;
}
else if(n>=1&&n<=10){
return true;
}else
return false;
}
当您说 "all test cases are running successfully" 时,这是相当误导的,因为您的测试用例太少了。
对于每个有趣的整数比较,您需要 2 个测试用例:一个比较成功,一个比较失败。作为测试数据,您应该选择产生差异的两个整数。例如,如果条件是n > 10
,则应该使用10和11作为测试数据。
在您的场景中,您有一个布尔值,并且在该布尔值的每种情况下,您都有两个整数条件。总而言之,这构成了 2 * 2 * 2 = 8
个测试用例。这比您目前拥有的 3 个测试用例要多得多,但这是必要的。
通过系统地测试您的代码,您将生成比没有这些测试更可靠的代码,即使这需要一些时间。但是在 return 中,您对代码更有信心,这是值得的。
进一步阅读:测试覆盖率、条件覆盖率。