在 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"
}
}
我用 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"
}
}