If statement Kotlin中三角形条件的实现

If statement Kotlin中三角形条件的实现,if-statement,kotlin,conditional-statements,java.util.scanner,If Statement,Kotlin,Conditional Statements,Java.util.scanner,我在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:Array){ val扫描器=扫描器(系统中的) }如果你是用C写的,我想你身体

我在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:Array){ val扫描器=扫描器(系统中的


}

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

应该是这样的+u不会返回任何结果

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")
        }
    }
}
这有助于说明发生了什么吗

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

(当人们省略大括号时,你通常会看到这种混乱;如果没有大括号,
else
条件适用于最近的、最里面的
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")
}
val checkA = a < b + c
val checkB = b < c + a
val checkC = c < a + b

if (checkA && checkB && checkC) {
    println("YES")
} else {
    println("NO")
}
这是冗长且重复的,但可能是必要的(例如,如果内部
if
前面有其他语句)

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

if (a + b > c) {
    if (b + c > a) {
        if (a + c > b) {
            println("YES")
        } else {
            println("NO")
        }
    } else {
        println("NO")
    }
} else {
    println("NO")
}
val checkA = a < b + c
val checkB = b < c + a
val checkC = c < a + b

if (checkA && checkB && checkC) {
    println("YES")
} else {
    println("NO")
}
val checkA=a
当条件变得复杂时,这会更容易阅读,特别是当您可以为它们指定好的简单描述时。在两者之间,你可以做任何你需要的计算。但缺点是没有短路:它总是评估所有条件,即使第一个条件是错误的。如果以后的情况有任何副作用,或涉及大量工作,这一点很重要。

fun main(){
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"
    }
}
println(方格三角形(1,2,3)) } 有趣的checkTriangle(a:Int,b:Int,c:Int):字符串{
返回何时(a+b)可以发布更新的代码吗?在当前代码中,只有前两个条件为真时才会输出。