【问题标题】:Find what fails in a if statement在 if 语句中查找失败的内容
【发布时间】:2020-04-29 19:47:12
【问题描述】:

我有以下代码并想使用我的 toast 消息中失败的条件。如果不检查每个 if,我该怎么做?

if(player1.isNullOrBlank() || player2.isNullOrBlank())
    Toast.makeText(this,"请输入两个玩家名称",Toast.LENGTH_LONG).show()

【问题讨论】:

    标签: kotlin


    【解决方案1】:

    我会在这里使用when 表达式,因为无论如何您都必须检查每个条件。

    val errorMessage -> when {
        player1.isNullOrBlank() && player2.isNullOrBlank() -> "Please enter a name for both players"
        player1.isNullOrBlank() -> "Please enter a name for Player 1"
        player2.isNullOrBlank() -> "Please enter a name for Player 2"
        else -> null
    }
    
    if (errorMessage != null) {
        Toast.makeText(this, errorMessage, Toast.LENGTH_LONG).show()
    } else {
        // success condition
    }
    

    另一个例子,使用also 代替赋值。

    when {
        player1.isNullOrBlank() && player2.isNullOrBlank() -> "Please enter a name for both players"
        player1.isNullOrBlank() -> "Please enter a name for Player 1"
        player2.isNullOrBlank() -> "Please enter a name for Player 2"
        else -> null
    }?.also { errorMessage ->
        Toast.makeText(this, errorMessage, Toast.LENGTH_LONG).show()
    }
    

    【讨论】:

    • 谢谢。这似乎是最简单的,因为没有办法判断成功与失败。
    【解决方案2】:

    您可以使用日志:

    Log.e("Player 1 Status", player1.isNullOrBlank() + "");
    Log.e("Player 2 Status", player2.isNullOrBlank() + "");
    

    并在您运行 LogCat 时检查 Red Log。

    【讨论】:

    • 这不会保留问题中的Toast.show()
    • 他甚至没有询问 Toast.show()。他在问如何在 if 语句中找到失败的地方。这就是为什么我向他展示了如何记录他所拥有的条件。
    【解决方案3】:

    试试这样的:

    val nullPlayerNames = listOf("p1" to player1, "p2" to player2)
        .filter { (_, p) -> p.isNullOrBlank() }
        .joinToString(separator = ", ") { (tag, _) -> tag }
    Toast.makeText(this, nullPlayerNames, Toast.LENGTH_LONG).show()
    

    【讨论】:

    • 不要那样做。可读性是最重要的。性能也不错。
    【解决方案4】:

    只需编写代码。不要想太多。只需检查您必须检查的内容并提供良好的错误消息即可。 || 运算符不输出要检查的旁道变量或类似的东西。只需编写代码即可。

    if (player1.isNullOrBlank() && player2.isNullOrBlank()) {
        Toast.makeText(this, "Please enter both player names", Toast.LENGTH_LONG).show()
    } else if(player1.isNullOrBlank()) {
        Toast.makeText(this, "Please enter player name 1", Toast.LENGTH_LONG).show()
    } else if(player2.isNullOrBlank()) {
        Toast.makeText(this, "Please enter player name 2", Toast.LENGTH_LONG).show()
    }
    

    【讨论】:

    • @IR42 怎么样? if 有两个部分。你如何使它成为when 表达式?
    • 这有什么不同,又以何种方式回答了 OP 的问题?这不是“不检查每个 if”。
    • @gonutz:“只需编写代码。我们称之为编程。”这里不需要snark。帮助指导新成员;这给人一种居高临下的感觉。
    • @JeremyCaney 是的,你是对的,已经消除了恶作剧。
    猜你喜欢
    • 2018-02-02
    • 2019-01-26
    • 2013-02-28
    • 2018-11-06
    • 2021-07-19
    • 2021-10-17
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多