You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin石头剪刀布游戏异常:电脑每次获胜求代码排查

问题排查:石头剪刀布游戏电脑总是获胜的原因
  • 核心问题:computerChoice变量未正确赋值
    你初始化了val computerChoice = "",但在生成随机数确定电脑出拳时,只通过println打印了电脑的选择,却没有把对应的值赋值给computerChoice。这导致computerChoice始终是空字符串,永远无法匹配玩家获胜的条件(比如playerChoice == "Rock" && computerChoice == "Scissor"),最终所有情况都会走到else -> "Computer"分支,所以电脑每次都赢。

修复后的代码

package com.blinky.kotlinbasics

fun main() {
    var computerChoice = "" // 改为var,方便后续赋值
    var playerChoice = ""
    println("Rock, Paper or Scissor? Enter your choice!")
    playerChoice = readln()

    val randomNumber = (1..3).random()
    if(randomNumber == 1){
        computerChoice = "Rock" // 给computerChoice赋值
        println("Rock")
    }
    else if(randomNumber == 2){
        computerChoice = "Paper" // 给computerChoice赋值
        println("Paper")
    }
    else if(randomNumber == 3){
        computerChoice = "Scissor" // 给computerChoice赋值
        println("Scissor")
    }

    val winner = when{
        playerChoice.equals(computerChoice, ignoreCase = true) -> "Tie" // 支持大小写不敏感输入
        playerChoice == "Rock" && computerChoice == "Scissor" -> "Player"
        playerChoice == "Paper" && computerChoice == "Rock" -> "Player"
        playerChoice == "Scissor" && computerChoice == "Paper" -> "Player"
        else -> "Computer"
    }
    if(winner == "Tie"){
        println("The game is a tie")
    }
    else{
        println("$winner won!") // 用字符串模板简化输出
    }
}

关键修改说明

  1. 将val computerChoice = ""改为var computerChoice = "":因为需要后续修改该变量的值,val是不可变变量,无法重新赋值
  2. 在每个随机数分支中添加computerChoice = "XXX":让变量真正存储电脑的出拳结果,才能和玩家的选择进行胜负判断
  3. 可选优化:用equals(ignoreCase = true)判断平局,允许玩家输入大小写不敏感的内容(比如输入"rock"也能正常匹配),提升用户体验

内容的提问来源于stack exchange,提问作者Blinky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 00:12:07