背单词软件技术笔记(V1.0核心版及V2.0随机挖字母)

V1.0:

准备数据: 找到 单词与翻译的对照数据 存入到文件中

在程序中读取文件中的数据

V2.0:

1: 随机抽取单词,去掉其中某个字母,要求用户输入这个字母填空

2:给出中文翻译,输入单词 实现拼写

3:抽取单词,给出4个选项 要求选择

一、核心目标

做一个能读取单词文件、随机抽单词让用户填缺失字母的简单背单词程序,全程用基础Java语法,无复杂逻辑。

二、代码编写步骤

第一步:导入必要的工具类

先告诉程序要用到的"辅助工具",比如读取输入、生成随机数、操作文件等。

java 复制代码
  
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

第二步:创建程序主类

所有代码都放在这个"容器"里,类名固定为 WordsDemo 。

java 复制代码
  
public class WordsDemo {
    public static void main(String[] args) {
        // 下面的代码都写在这里面
    }
}

第三步:初始化工具和存储容器

在 main 方法里,先准备好要用到的"工具"和存单词的"盒子"。

java 复制代码
  
// 1. 键盘输入工具(接收用户答案)
Scanner sc = new Scanner(System.in);
// 2. 随机数工具(随机抽单词、随机挖字母)
Random ran = new Random();
// 3. 存英文单词的盒子(动态扩容,多少单词都能装)
ArrayList<String> words = new ArrayList<>();
// 4. 存中文翻译的盒子(和英文单词一一对应)
ArrayList<String> chineseWords = new ArrayList<>();

第四步:让用户选择单词表(CET4/CET6)

让用户输入编号,程序对应找到要读取的单词文件。

java 复制代码
  
System.out.println("请选择单词表编号:");
System.out.println("=====1001-CET4=====");
System.out.println("=====1002-CET6=====");
int num = sc.nextInt(); // 接收用户输入的编号
String wordsLib = ""; // 存储单词文件的路径

// 根据编号选择文件
if (num == 1001) {
    wordsLib = "wordslib/CET4.txt";
} else if (num == 1002) {
    wordsLib = "wordslib/CET6.txt";
} else {
    System.out.println("编号错误,默认使用CET4单词表~");
    wordsLib = "wordslib/CET4.txt";
}

第五步:读取单词文件的数据

把文件里的英文和中文对应存到前面准备的"盒子"里。

java 复制代码
  
// 1. 找到对应的单词文件
File file = new File(wordsLib);

try {
    // 2. 准备文件读取工具(缓冲读取,更快更方便)
    FileReader fr = new FileReader(file);
    BufferedReader br = new BufferedReader(fr);

    // 3. 一行一行读文件,直到读完
    String line;
    while ((line = br.readLine()) != null) {
        // 按"#"拆分,左边是英文,右边是中文
        String[] strs = line.split("#");
        String eng = strs[0];
        String chinese = strs[1];

        // 把拆分后的单词和翻译存到盒子里
        words.add(eng);
        chineseWords.add(chinese);
    }

    // 4. 关闭读取工具(用完要关掉,节省资源)
    br.close();
    fr.close();

} catch (FileNotFoundException e) {
    // 找不到文件时提示
    System.out.println("单词文件找不到,请检查路径是否正确!");
} catch (IOException e) {
    // 读取文件出错时提示
    System.out.println("读取单词文件失败!");
}

第六步:核心刷题逻辑(随机挖字母,用户填空)

循环抽单词、挖字母,直到用户手动关闭程序。

java 复制代码
  
// 先获取单词总数(盒子里有多少个单词)
int wordCount = words.size();

// 循环刷题(一直刷,直到关闭程序)
while (true) {
    // 1. 随机选一个单词(从0到单词总数-1选一个索引)
    int randomWordIndex = ran.nextInt(wordCount);
    String selectedWord = words.get(randomWordIndex); // 选中的英文单词
    String selectedChinese = chineseWords.get(randomWordIndex); // 对应的中文翻译

    // 2. 随机挖掉一个字母(从单词的字母中选一个索引)
    int wordLength = selectedWord.length();
    int randomCharIndex = ran.nextInt(wordLength);
    char correctChar = selectedWord.charAt(randomCharIndex); // 被挖掉的正确字母

    // 3. 构造带"_"的单词(比如hello挖掉第2个字母变成he_lo)
    String frontPart = selectedWord.substring(0, randomCharIndex); // 挖掉字母前面的部分
    String backPart = selectedWord.substring(randomCharIndex + 1); // 挖掉字母后面的部分
    String wordWithBlank = frontPart + "_" + backPart; // 带空白的单词

    // 4. 提示用户答题
    System.out.println("\n请猜出单词中缺失的字母:" + wordWithBlank);
    String userInput = sc.next(); // 接收用户输入的字母

    // 5. 判断用户答案是否正确(只取用户输入的第一个字符,避免输入多个字符)
    char userChar = userInput.charAt(0);
    if (userChar == correctChar) {
        // 答对了,显示完整单词和翻译
        System.out.println("正确!完整单词:" + selectedWord + ",中文翻译:" + selectedChinese);
    } else {
        // 答错了,提示重新输入(直到答对再换下一个单词)
        while (userChar != correctChar) {
            System.out.println("错误!请重新输入:");
            userInput = sc.next();
            userChar = userInput.charAt(0);
        }
        System.out.println("终于对啦!完整单词:" + selectedWord + ",中文翻译:" + selectedChinese);
    }
}

三、运行说明

  1. 运行程序后,输入1001或1002选择单词表。
  2. 按照提示填缺失的字母,答对换词,答错可以重新输入。
  3. 想退出程序时,直接关闭运行窗口即可。

四、关键知识点

  1. ArrayList :动态数组,像可伸缩的盒子,能装任意多个单词,不用提前确定长度。
  2. BufferedReader :文件读取工具,能一行一行读文件,比单个字符读效率高。
  3. Random :随机数工具, nextInt(n) 生成0到n-1的随机数,用来选单词和挖字母。
  4. try-catch :异常处理,文件找不到、读错时不会让程序崩溃,还会给出提示。
相关推荐
YJlio3 小时前
Active Directory 工具学习笔记(10.8):AdInsight——保存与导出(证据留存、共享与二次分析)
数据库·笔记·学习
xqqxqxxq3 小时前
背单词软件技术笔记(V2.0扩展版)
java·笔记·python
yuxb734 小时前
Kubernetes核心组件详解与实践:controller
笔记·kubernetes
受之以蒙6 小时前
Rust 与 dora-rs:吃透核心概念,手把手打造跨语言的机器人实时数据流应用
人工智能·笔记·rust
2401_834517076 小时前
AD学习笔记-36 gerber文件输出
笔记·学习
hhhhhhh_hhhhhh_6 小时前
TC3x7-DEMO-V1.0原理图自学笔记
笔记
气π6 小时前
【JavaWeb】——(若依 + AI)-基础学习笔记
java·spring boot·笔记·学习·java-ee·mybatis·ruoyi
深蓝海拓6 小时前
PySide6从0开始学习的笔记(三) 布局管理器与尺寸策略
笔记·python·qt·学习·pyqt
暗然而日章6 小时前
C++基础:Stanford CS106L学习笔记 8 继承
c++·笔记·学习