Algorithm 为什么第一个决策使覆盖率测试用例更好?

Algorithm 为什么第一个决策使覆盖率测试用例更好?,algorithm,kotlin,Algorithm,Kotlin,我正在解决一个问题,我不明白为什么会出现这个问题 fun kangaroo(x1: Int, v1: Int, x2: Int, v2: Int): String { if (x1 < x2 && v1 < v2) return "NO" return if (v1 != v2 && (x1 - x2) % (v2 - v1) == 0) "YES" else "NO" } 有趣的袋鼠(x1:Int,v1:Int,x2:Int,v2:

我正在解决一个问题,我不明白为什么会出现这个问题

fun kangaroo(x1: Int, v1: Int, x2: Int, v2: Int): String {
    if (x1 < x2 && v1 < v2) return "NO"
    return if (v1 != v2 && (x1 - x2) % (v2 - v1) == 0) "YES" else "NO"
}
有趣的袋鼠(x1:Int,v1:Int,x2:Int,v2:Int):字符串{ 如果(x1 比这个好吗

fun kangaroo(x1: Int, v1: Int, x2: Int, v2: Int): String {
    return if (v1 == v2 && (x1 - x2) % (v2 - v1) != 0 || (x1 < x2 && v1 < v2)) "NO" else "YES"
}
有趣的袋鼠(x1:Int,v1:Int,x2:Int,v2:Int):字符串{ 如果(v1==v2&&(x1-x2)%(v2-v1)!=0 | |(x1您在每个函数中的逻辑不是等价的。尝试翻转下面的比较语句时出现问题:

v1 != v2 && (x1 - x2) % (v2 - v1) == 0
如果此结果的补码为真,则返回“否”。您提出的第二个解决方案实际上没有实现补码。真正的补充如下:

!(v1 != v2 && (x1 - x2) % (v2 - v1) == 0) = !(v1 != v2) || !((x1 - x2) % (v2 - v1) == 0)
减少上述结果会产生:

(v1 == v2) || ((x1 - x2) % (v2 - v1) != 0)
我用这个补码解决了这个问题

您的实际功能应该是:

fun kangaroo(x1: Int, v1: Int, x2: Int, v2: Int): String {
    return if (v1 == v2 || (x1 - x2) % (v2 - v1) != 0 || (x1 < x2 && v1 < v2)) "NO" else "YES"
}
有趣的袋鼠(x1:Int,v1:Int,x2:Int,v2:Int):字符串{ 如果(v1==v2 | | |(x1-x2)%(v2-v1)!=0 | |(x1这里您所说的“更好”是什么意思?