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

Java剪刀石头布游戏输入'n'误触发错误提示的问题修复求助

修复剪刀石头布游戏中输入'n'触发错误提示的问题

你的问题根源是Java字符串比较的误区:用==比较字符串是判断两个对象是否为同一个引用,而不是比较内容是否相等。当输入'n'时,playAgain == "n"永远为false,所以会走到else分支输出错误提示。

核心修复点

把所有字符串比较的==替换成equals()方法,推荐用常量字符串调用equals()(避免空指针风险):

// 原代码
if (playAgain == "n") {
// 修复后
if ("n".equals(playAgain)) {

同样,胜负判断里的字符串比较也要修改:

// 原代码
if (pemain == "Gunting" && komp == "Kertas" ||
    pemain == "Batu" && komp == "Gunting" ||
    pemain == "Kertas" && komp == "Batu") {
// 修复后
if (("Gunting".equals(pemain) && "Kertas".equals(komp)) ||
    ("Batu".equals(pemain) && "Gunting".equals(komp)) ||
    ("Kertas".equals(pemain) && "Batu".equals(komp))) {

额外修复的潜在问题

除了核心问题,代码还有几个逻辑漏洞需要补全:

  1. 处理无效输入:当用户输入非1-3的数字时,pemain会是空字符串,导致胜负判断错误,需要在switch里加default分支提示错误并重新循环。
  2. 平局判断:原代码只有玩家赢和电脑赢的分支,漏掉了双方选择相同的平局情况。
  3. 优化Random实例:每次循环新建Random对象没必要,把它移到循环外复用更高效。

完整修复后的代码

import java.util.*;

public class App {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        Boolean play = true;
        int skorPemain = 0, skorKomp = 0;
        // 把Random实例移到循环外复用
        Random randomGenerator = new Random();

        while (play) {
            int random = randomGenerator.nextInt(3);
            String komp, pemain = "";

            if (random == 0) {
                komp = "Gunting";
            } else if (random == 1) {
                komp = "Batu";
            } else {
                komp = "Kertas";
            }

            System.out.print("Game Suit :\n"
                    + "1. Gunting\n"
                    + "2. Batu\n"
                    + "3. Kertas\n"
                    + "Pilih [1/2/3] : ");
            // 先判断输入是否为整数,避免输入非数字导致崩溃
            if (!input.hasNextInt()) {
                System.out.println("Input tidak valid! Masukkan angka 1-3.");
                input.next(); // 清空无效输入
                continue;
            }
            int pilih = input.nextInt();

            switch (pilih) {
                case 1:
                    pemain = "Gunting";
                    break;
                case 2:
                    pemain = "Batu";
                    break;
                case 3:
                    pemain = "Kertas";
                    break;
                default:
                    System.out.println("Pilihan tidak valid! Pilih antara 1-3.");
                    continue; // 重新循环,让用户重新输入
            }

            // 修复字符串比较,新增平局判断
            if (("Gunting".equals(pemain) && "Kertas".equals(komp)) ||
                ("Batu".equals(pemain) && "Gunting".equals(komp)) ||
                ("Kertas".equals(pemain) && "Batu".equals(komp))) {
                System.out.println("Pemain memilih " + pemain + " dan komputer memilih " + komp
                        + "\nPemain menang, karena " + pemain + " mengalahkan " + komp);
                skorPemain++;
            } else if (pemain.equals(komp)) {
                System.out.println("Pemain memilih " + pemain + " dan komputer memilih " + komp
                        + "\nSeri!");
            } else {
                System.out.println("Pemain memilih " + pemain + " dan komputer memilih " + komp
                        + "\nKomputer menang, karena " + komp + " mengalahkan " + pemain);
                skorKomp++;
            }
            System.out.println("\nSkor Pemain vs Komputer : " + skorPemain + " vs " + skorKomp);

            System.out.print("Mau main lagi [y/n] : ");
            String playAgain = input.next();
            System.out.println("");

            // 修复字符串比较
            if ("n".equals(playAgain)) {
                System.out.println("Terima kasih sudah bermain.");
                play = false;
            } else if ("y".equals(playAgain)) {
                continue;
            } else {
                System.out.println("Wrong input!");
                play = false;
            }
        }
        input.close(); // 关闭Scanner,避免资源泄漏
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:30:49