谁能发现我犯的错误?

问题描述 投票:0回答:1

所有的测试用例都在成功运行,除了一个测试用例是 in1To10(9,真)→假。

问题:给定一个数字n,如果n在1...10(含)范围内,则返回true。

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

in1To10(5, false) → truein1To10(11, false) → falsein1To10(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;
}
java if-statement boolean boolean-logic
1个回答
0
投票

正如你在问题中提到的,返回的布尔值是基于 outsideMode的布尔值范围(1-10) 价值

但在你的程序中,第一个返回语句的值只由范围标准决定,你没有测试 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(条件)中加入outsideMode,与第二条if(条件)相同。

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

0
投票

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

对于每个有趣的整数比较,你需要2个测试用例:一个比较成功,一个失败。作为测试数据,你应该选取有区别的两个整数。例如,如果条件是 n > 10,你应该使用10和11作为测试数据。

在你的方案中,你有一个布尔值,在每个布尔值的情况下,你有两个整数条件。总的来说,这使得 2 * 2 * 2 = 8 测试用例。这比你目前的3个测试用例要多得多,但这是必要的。

通过系统地测试你的代码,你会产生比没有这些测试更可靠的代码,即使这需要一些时间。但换来的是你对代码更有信心,这也是值得的。

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


0
投票

先说说 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,这意味着它将返回真。

换一下就好了

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

0
投票

你还没有考虑到 outsideMode 在你的第一次返回中。另外,你还没有在计算返回值时加入逻辑。outsideModefalse.

具体操作如下。

public class Main {
    public static void main(String[] args) {
        // Tests
        System.out.println(in1To10(1, true));
        System.out.println(in1To10(2, true));
        System.out.println(in1To10(10, true));
        System.out.println(in1To10(11, true));
        System.out.println(in1To10(1, false));
        System.out.println(in1To10(2, false));
        System.out.println(in1To10(10, false));
        System.out.println(in1To10(11, false));
    }

    public static boolean in1To10(int n, boolean outsideMode) {
        boolean returnValue = false;
        if (outsideMode && (n <= 1 || n >= 10)) {
            returnValue = true;
        } else if (!outsideMode && (n >= 1 && n <= 10)) {
            returnValue = true;
        }
        return returnValue;
    }
}

输出:

true
false
true
true
true
true
true
false
© www.soinside.com 2019 - 2024. All rights reserved.