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

基于Java开发单词生成器遇到实现难题求助

完整实现你的字母组词游戏功能

嘿,我来帮你把这个功能完整落地!咱们把需求拆成几个核心模块,一步步搞定:

核心功能拆解

  • 循环接收用户输入(V/C),直到凑够10个字母
  • 输入V时随机输出元音字母(示例用大写A/E/I/O/U)
  • 输入C时随机输出辅音字母(除元音外的英文字母)
  • 收集完10个字母后,启动2分钟倒计时,允许用户用这些字母组词
  • 处理非法输入(比如用户输错内容时,提示重新输入)

完整Java代码实现

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;

public class LetterGame {
    // 预定义元音和辅音字母集合
    private static final char[] VOWELS = {'A', 'E', 'I', 'O', 'U'};
    private static final char[] CONSONANTS = {'B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'M',
                                             'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'X', 'Y', 'Z'};
    private static boolean timeExpired = false; // 标记倒计时是否结束

    public static void main(String[] args) {
        Scanner inputScanner = new Scanner(System.in);
        Random randomGenerator = new Random();
        List<Character> collectedLetters = new ArrayList<>();

        // 第一阶段:收集10个字母
        System.out.println("欢迎来到字母组词游戏!");
        System.out.println("输入(V)获取元音字母,输入(C)获取辅音字母,凑够10个字母即可开始组词~");
        while (collectedLetters.size() < 10) {
            System.out.printf("当前已收集%d个字母,请输入(V/C):", collectedLetters.size());
            String userInput = inputScanner.nextLine().trim().toUpperCase();

            // 输入合法性校验
            if (!userInput.equals("V") && !userInput.equals("C")) {
                System.out.println("输入无效!请输入V或C哦~");
                continue;
            }

            // 随机生成对应类型的字母
            char selectedLetter;
            if (userInput.equals("V")) {
                selectedLetter = VOWELS[randomGenerator.nextInt(VOWELS.length)];
            } else {
                selectedLetter = CONSONANTS[randomGenerator.nextInt(CONSONANTS.length)];
            }
            collectedLetters.add(selectedLetter);
            System.out.printf("成功获取字母:%c,当前字母列表:%s%n", selectedLetter, collectedLetters);
        }

        // 第二阶段:启动倒计时并接收组词
        System.out.println("\n恭喜!已收集10个字母:" + collectedLetters);
        System.out.println("现在给你2分钟时间,用这些字母组词(示例默认允许重复使用字母,你可自行调整规则)");
        System.out.println("请输入你的组词:");

        // 启动2分钟倒计时任务
        Timer countdownTimer = new Timer();
        countdownTimer.schedule(new TimerTask() {
            @Override
            public void run() {
                timeExpired = true;
                System.out.println("\n时间到!游戏结束~");
                inputScanner.close();
                System.exit(0);
            }
        }, 2 * 60 * 1000); // 2分钟 = 120000毫秒

        // 持续接收用户组词,直到倒计时结束
        while (!timeExpired) {
            if (inputScanner.hasNextLine()) {
                String userWord = inputScanner.nextLine().trim();
                if (!userWord.isEmpty()) {
                    System.out.printf("你输入的组词是:%s%n", userWord);
                    // 这里可以扩展:添加组词合法性校验(比如是否仅使用收集到的字母)
                }
            }
        }
    }
}

关键细节说明

  1. 字母集合定义:把元音和辅音分开存数组,方便快速随机选取
  2. 输入校验循环:避免用户输错内容导致程序异常,友好提示重新输入
  3. 异步倒计时:用Timer实现后台倒计时,主线程不被阻塞,用户可以正常输入组词
  4. 状态标记timeExpired:用来控制组词输入的循环,倒计时结束后自动终止程序

你还可以根据需求扩展细节:

  • 限制字母重复使用次数
  • 添加组词合法性校验(检查单词是否仅包含收集到的字母)
  • 改成小写字母输出
  • 增加组词评分规则等等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:57:48