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);
}
}
三、运行说明
- 运行程序后,输入1001或1002选择单词表。
- 按照提示填缺失的字母,答对换词,答错可以重新输入。
- 想退出程序时,直接关闭运行窗口即可。
四、关键知识点
- ArrayList :动态数组,像可伸缩的盒子,能装任意多个单词,不用提前确定长度。
- BufferedReader :文件读取工具,能一行一行读文件,比单个字符读效率高。
- Random :随机数工具, nextInt(n) 生成0到n-1的随机数,用来选单词和挖字母。
- try-catch :异常处理,文件找不到、读错时不会让程序崩溃,还会给出提示。