【问题标题】:Can anyone spot the error that i am making?谁能发现我正在犯的错误?
【发布时间】:2020-10-03 01:33:05
【问题描述】:

除了 in1To10(9, true) → false 的测试用例之外,所有测试用例均成功运行。

问题:

给定一个数字 n,如果 n 在 1..10 范围内,则返回 true, 包括的。除非 outsideMode 为真,在这种情况下,如果 该数字小于或等于 1,或大于或等于 10。

in1To10(5, false) → true in1To10(11, 假) → 假 in1To10(11, true) → true

我的解决方案:-

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

【问题讨论】:

  • 是的,我可以发现错误。您应该使用调试器自己找到它。这将帮助您自己解决这些简单的错误。详情请见here

标签: java if-statement boolean boolean-logic


【解决方案1】:

正如您在问题中提到的,返回布尔值基于 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.解决方案: 包括与第一个 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;
}

【讨论】:

    【解决方案2】:

    当你说“所有测试用例都运行成功”时,这是相当误导,因为你的测试用例太少了。

    对于每个有趣的整数比较,您需要 2 个测试用例:一个比较成功,一个比较失败。作为测试数据,您应该选择产生差异的两个整数。例如条件为n &gt; 10,则应使用10和11作为测试数据。

    在您的场景中,您有一个布尔值,并且在该布尔值的每种情况下,您都有两个整数条件。总之,这使得2 * 2 * 2 = 8 测试用例。这比您目前拥有的 3 个测试用例要多得多,但这是必要的。

    通过系统地测试您的代码,您将产生比没有这些测试更可靠的代码,即使这需要一些时间。但作为回报,您会对代码更有信心,这是值得的。

    延伸阅读:测试覆盖率、条件覆盖率。

    【讨论】:

      【解决方案3】:

      首先outsideMode 是一个布尔值,所以写outisdeMode&amp;&amp;(n&lt;=1||n&gt;=10)

      你的错误是

        if(n>=1&&n<=10){
          return true;
        }
      

      将在之前执行

      else if(outsideMode==true&&(n<=1||n>=10))
      

      因为 9 >= 1 && 9

      交换它们,你会没事的

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

      【讨论】:

      • 它不工作,仍然,一个案例正在失败。
      • 你能提供更多关于失败案例的内部信息吗? @ritesh_ratn
      • 这个测试用例正在失败-> in1To10(9, true)。预期的输出是“假”,但您的代码在这种情况下运行的是“真”。
      • 现在重试它应该是固定的。 Code has been tested here
      • @ritesh_ratn 在upvote按钮下,(这个答案的左上角)。 (目前它显示 0 并且有一个向上箭头和一个向下箭头)它目前是灰色的。将其标记为已解决将显示为绿色。(通过单击它)
      猜你喜欢
      • 2010-11-30
      • 1970-01-01
      • 2020-04-30
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-24
      • 1970-01-01
      相关资源
      最近更新 更多