在 Kotlin 中满足三角形的条件

Fulfilling The Conditions of a Triangle in Kotlin

我用 Kotlin 编写了下面的代码来检查三个值 a、b 和 c 是否可以组成一个三角形。法律规定这三个条件必须为真:(a + b > c); ( b + c > a); (a + c > b),其中 a、b 和 c 是三角形边的值。我在下面写了代码 运行,发现它 没有输出 也没有错误。

我后来通过用下面的三个 if 语句替换下面的代码得到了正确的代码:(a + b > c && b + c > a && a + c > b) .请帮助我了解为什么它没有输出。谢谢

进口java.util。* 有趣的主要(args:数组){ val scanner = 扫描仪(System.in)

// write your code here
val a = scanner.nextInt()
val b = scanner.nextInt()
val c = scanner.nextInt()


if ((a + b) > c)  { 
    if ((b + c) > a) {
        if ((a + c) > b){
    println("YES")
} else {
    println("NO")
    }
    }
}

}

如果你是用 C 写的,我想你的这一部分 body (a + b > c && b + c > a && a + c > b)

应该是这样 + 你 return 没有任何结果。

if ((a + b > c ) && (b + c > a) && (a + c > b)) 
return ("YES")
else 
return ("NO")

让我们修复代码中的缩进:

if (a + b > c) {
    if (b + c > a) {
        if (a + c > b) {
            println("YES")
        } else {
            println("NO")
        }
    }
}

这是否有助于说明正在发生的事情?

如果第一个或第二个 if 条件为假,则它会跳过其余条件。只有当两者都为真时,它才会检查第三个,并相应地打印“YES”或“NO”。

(当人们省略大括号时,您通常会看到这种混淆;没有大括号,else 条件适用于最近的、最里面的 if,这可能令人惊讶。但这里的大括号有没有讲清楚的!)

如果你总是希望它打印一些东西,那么有三个主要选项。首先,将条件折叠为单个 if,正如您已经发现的那样:

if (a + b > c && b + c > a && a + c > b) {
    println("YES")
} else {
    println("NO")
}

这是最简单的方法,但如果条件很大或很复杂,就会变得非常笨拙。

其次,为每个if添加一个else分支:

if (a + b > c) {
    if (b + c > a) {
        if (a + c > b) {
            println("YES")
        } else {
            println("NO")
        }
    } else {
        println("NO")
    }
} else {
    println("NO")
}

这是冗长且重复的,但可能是必要的(例如,如果内部 if 之前有其他语句)。

第三,您可以将条件移到 if 之外:

val checkA = a < b + c
val checkB = b < c + a
val checkC = c < a + b

if (checkA && checkB && checkC) {
    println("YES")
} else {
    println("NO")
}

当条件变得复杂时,这会更容易阅读,尤其是当您可以为它们分配简单的描述时。您可以在两者之间进行任何需要的计算。但缺点是没有短路:它总是评估所有条件,即使第一个条件为假。如果后面的条件有任何副作用,或者涉及大量工作,那很重要。

fun main() {
    println(checkTriangle(1, 2, 3))
}

fun checkTriangle(a: Int, b: Int, c: Int): String {

    return when (a + b <= c || a + c <= b || b + c <= a) {
        true -> "YES"
        else -> "NO"
    }
}