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!") // 用字符串模板简化输出 } }
关键修改说明
- 将
val computerChoice = ""改为var computerChoice = "":因为需要后续修改该变量的值,val是不可变变量,无法重新赋值 - 在每个随机数分支中添加
computerChoice = "XXX":让变量真正存储电脑的出拳结果,才能和玩家的选择进行胜负判断 - 可选优化:用
equals(ignoreCase = true)判断平局,允许玩家输入大小写不敏感的内容(比如输入"rock"也能正常匹配),提升用户体验
内容的提问来源于stack exchange,提问作者Blinky
相关产品推荐
相关产品推荐

