谁能发现我犯的错误?

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 中,您对代码更有信心,这是值得的。

进一步阅读:测试覆盖率、条件覆盖率。