Kotlin 条件下的两个优先级

Two priorities in a condition in Kotlin

我做了一个生成随机数的简单游戏,玩家需要猜测随机数。玩家只有 6 次猜测机会,如果玩家在这 6 次机会中没有猜到数字,则游戏将结束。问题是当玩家在 第六次机会 上输入 RIGHT 答案时。系统显示 imgLose 即使答案是 TRUE.

这里是代码段:

            guessCount += 1
            when {
                guessNumber > randomNumber -> {
                    status.text = "Less than ${tGuess.text}"
                    tGuess.text = ""
                }
                guessNumber < randomNumber -> {
                    status.text = "More than ${tGuess.text}"
                    tGuess.text = ""
                }
                guessNumber == randomNumber -> {
                    status.text = "You're Correct! \nThe Answer is ${randomNumber.toString()}"
                    btnGuess.isEnabled = false
                    imgWin.visibility = View.VISIBLE
                    var soundEffect = MediaPlayer.create(this, R.raw.wining)
                    soundEffect.start();
                }
            }

            if (guessCount == guessLimit){
                status.text = "The Limit is Exceeded! \nThe Answer is $randomNumber"
                btnGuess.isEnabled = false
                var soundEffect = MediaPlayer.create(this, R.raw.losing)
                soundEffect.start();
                imgLose.visibility = View.VISIBLE
            }

The result with coding right now

有很多方法可以处理这个问题,但也取决于您的其余代码。

如果可能的话,如果该函数中没有其他相关代码,您可以尝试在正确猜测后简单地return

另一种方法是将是否有正确的猜测保存在一个布尔值中并检查它。例如:

        var isCorrect = false
        guessCount += 1
        when {
            guessNumber > randomNumber -> {
                status.text = "Less than ${tGuess.text}"
                tGuess.text = ""
            }
            guessNumber < randomNumber -> {
                status.text = "More than ${tGuess.text}"
                tGuess.text = ""
            }
            guessNumber == randomNumber -> {
                status.text = "You're Correct! \nThe Answer is  ${randomNumber.toString()}"
                btnGuess.isEnabled = false
                imgWin.visibility = View.VISIBLE
                var soundEffect = MediaPlayer.create(this, R.raw.wining)
                soundEffect.start();
                isCorrect = true
            }
        }

        if (guessCount == guessLimit && !isCorrect){
            status.text = "The Limit is Exceeded! \nThe Answer is $randomNumber"
            btnGuess.isEnabled = false
            var soundEffect = MediaPlayer.create(this, R.raw.losing)
            soundEffect.start();
            imgLose.visibility = View.VISIBLE
        }

实际上只需更改此行就足够了,因为它只会在正确猜测时被禁用:

if (guessCount == guessLimit && btnGuess.isEnabled){