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

如何为Java石头剪刀布程序实现用户输入Yes后重启运行的功能

Java石头剪刀布重启功能实现修正方案

原有代码存在的问题

  • 缺少外层控制游戏重启的while循环,仅打印了是否重玩的提示,没有读取用户输入的判断逻辑
  • 玩家分数、电脑分数、局数变量初始化位置错误,游戏重启时不会重置数值
  • 重复在每轮游戏内创建Scanner对象,存在资源浪费
  • 玩家胜利判断逻辑错误:playerMove.equalsIgnoreCase("Rock") && computerMove.equalsIgnoreCase("Paper")属于玩家输的场景,误写到了胜利分支中
  • 胜负结算逻辑写在了3局循环内部,每玩一轮就会结算一次胜负,不符合三局两胜的设计预期

修正后完整代码

import java.util.Scanner;

public class RockPaperScissors {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        // 外层重启控制循环
        String playAgain;
        do {
            // 每局游戏开始前重置分数和局数
            int playerScore = 0;
            int computerScore = 0;
            int round = 0;

            // 3局游戏循环
            while (round < 3) {
                System.out.println("请输入你的出拳:石头、剪刀、布");
                System.out.println(">>");
                String playerMove = input.next();

                // 输入合法性校验
                if (!playerMove.equalsIgnoreCase("石头") && !playerMove.equalsIgnoreCase("剪刀") && !playerMove.equalsIgnoreCase("布")) {
                    System.out.println("出拳无效,对手得1分");
                    computerScore++;
                    round++;
                    System.out.println("你的分数:"+ playerScore + ";对手分数:"+ computerScore);
                    continue;
                }

                // 生成电脑出拳
                int computerInt = (int)(Math.random()*3);
                String computerMove = switch (computerInt) {
                    case 0 -> "石头";
                    case 1 -> "布";
                    default -> "剪刀";
                };
                System.out.println("对手出拳:"+ computerMove);

                // 胜负判断
                if (playerMove.equalsIgnoreCase(computerMove)) {
                    System.out.println("平局");
                } else if (
                    (playerMove.equalsIgnoreCase("石头") && computerMove.equalsIgnoreCase("剪刀")) ||
                    (playerMove.equalsIgnoreCase("剪刀") && computerMove.equalsIgnoreCase("布")) ||
                    (playerMove.equalsIgnoreCase("布") && computerMove.equalsIgnoreCase("石头"))
                ) {
                    System.out.println("你赢了本轮");
                    playerScore++;
                } else {
                    System.out.println("你输了本轮");
                    computerScore++;
                }
                round++;
                System.out.println("你的分数:"+ playerScore + ";对手分数:"+ computerScore);
            }

            // 三局结束后结算最终胜负
            System.out.println("=== 本局最终结果 ===");
            if (playerScore < computerScore) {
                System.out.println("你输了本局,太遗憾了;(");
            } else if (playerScore > computerScore) {
                System.out.println("你赢了本局,获得小奖励;) ");
            } else {
                System.out.println("本局平局,可以再试一次^_^");
            }

            // 询问是否重玩
            System.out.println("是否要再玩一局?输入Yes重启,输入其他内容退出游戏");
            playAgain = input.next();
        } while (playAgain.equalsIgnoreCase("Yes"));

        input.close();
        System.out.println("游戏已成功退出");
    }
}

核心修改说明

  • 新增do-while外层循环控制游戏重启,每次循环结束时读取用户输入,输入为Yes时自动重启游戏
  • 将playerScore、computerScore、round变量移到内层游戏循环前定义,每次重启游戏自动重置数值
  • 修正了玩家胜利判断逻辑,移除错误的胜利条件
  • 将最终胜负结算逻辑移到3局循环外部,仅在3局全部结束后输出最终结果
  • Scanner统一在程序入口创建,程序退出前关闭,避免重复创建资源
  • 界面提示全部替换为中文,符合使用习惯

内容的提问来源于stack exchange,提问作者Tran Minh My

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:45:05