首页 > 极客资料 博客日记
Java实现英语作文单词扫盲程序
2024-09-10 21:30:04极客资料围观25次
本篇文章分享Java实现英语作文单词扫盲程序,对你有帮助的话记得收藏一下,看极客之家收获更多编程知识
来自背英语四级单词的突发奇想:
是否可以通过Java语言实现一个随机抽取作文中单词进行复习的程序。
成果展示:
点击查看代码
package Demo;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class random_words {
public static void main(String[] args) {
//导入英语作文数据
String data = "***英语文章数据abcdefg***";
ArrayList<String> list = new ArrayList<>();//存储所有长度大于3的单词
ArrayList<String> doneList = new ArrayList<>();//存储已出现的单词
Random r = new Random();
Scanner sc = new Scanner(System.in);
// 按空格和标点符号分割字符串
String[] words = data.split("[\\p{Punct}\\s+]");
// 长度大于3的单词并加入列表
for (String word : words){
if (word.length()>3 && !word.isEmpty()) { //长度大于3 且 不为空
list.add(word);
}
}
//生成5个不重复的单词
boolean choose = true;//控制循环
while(choose && list.size()>doneList.size()){
ArrayList<String> nowList= new ArrayList<>();//用于存储生成的5个单词
while (nowList.size()<5 && list.size()> doneList.size()){
int n = r.nextInt(list.size());
String randomWords = list.get(n);
//检查该组单词是否重复
if (!nowList.contains(randomWords) && !doneList.contains(randomWords)) {
nowList.add(randomWords);
doneList.add(randomWords);
}
}
//输出生成的单词
System.out.println("请复习:");
for (String word:nowList) {
System.out.println(word);
}
//检查剩余单词数量是否不足5个
if (doneList.size()< list.size()) {
System.out.println("是否继续复习(y/n)");
String userChick = sc.nextLine();
if (!userChick.equalsIgnoreCase("y")) {
choose = false;
}
}else{
for (String word:list) {
if (!doneList.contains(word)) {
System.out.println(word);
}
}
break;
}
}
System.out.println("当前单词已复习完,请换下一篇");
sc.close();
}
}
使用说明:
将一篇英文文章放入data数据中运行即可。
程序运行逻辑:
随机抽取文章中超过4位字母的英文单词,每五个单词为一组,根据程序提示(y/n)?输入“y”即可继续复习下一组单词,相反输入“n”结束程序。当文章剩余单词凑不出5个单词/组的要求时,直接输出剩余单词。
实现过程以及涉及知识扫盲(写给自己看的):
-
初步构想只考虑了分割单词,从中随机抽取一个单词进行复习。发现,一次只复习一个单词速度太慢并且出现的单词为介词,对于英语复习无用。
-
解决:
加一个while循环,每5个单词为一组;排除4个字母一下的单词,加一个ArrayList集合(list)用于存储所有长度大于3个字母的单词。
-
代码:
点击查看代码
ArrayList<String> list = new ArrayList<>();//存储所有长度大于3的单词
while(choose && list.size()>doneList.size()){
ArrayList<String> nowList= new ArrayList<>();//用于存储生成的5个单词
while (nowList.size()<5 && list.size()> doneList.size()){
int n = r.nextInt(list.size());
String randomWords = list.get(n);
-
完成后发现,在固定文档中随机生成的多个数据具有重复性和存在最后集合剩余单词不足5个的情况。
-
解决:
添加集合,在已存在的list集合基础上添加ArrayList(doneList):已生成的单词和ArrayList(NowList):正生成5个单词,用于解决重复性问题。
-
代码:
点击查看代码
ArrayList<String> doneList = new ArrayList<>();//存储已出现的单词
ArrayList<String> nowList= new ArrayList<>();//用于存储生成的5个单词
-
代码:
点击查看代码
if (!nowList.contains(randomWords) && !doneList.contains(randomWords)) {
nowList.add(randomWords);
doneList.add(randomWords);
}
设置choose控制程序,初始值为true。如果doneList小于list,询问是否继续(y/n)?用户选择“Y”,打印下一组单词,剩余单词不足5个直接打印;选择“N”,返回choose值为false,结束程序运行。
-
代码:
点击查看代码
if (doneList.size()< list.size()) {
System.out.println("是否继续复习(y/n)");
String userChick = sc.nextLine();
if (!userChick.equalsIgnoreCase("y")) {
choose = false;
}
}else{
for (String word:list) {
if (!doneList.contains(word)) {
System.out.println(word);
}
}
break;
}
对此程序的畅想:
- 优化逻辑,使用更加简便的方法
- 通过文件I/O实现英文文章以文件形式导入
- 编写前端页面,实现前后端分离,上传服务器,便捷使用
@andmin_tai菜鸟原创
敬请斧正!
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- Nuxt.js 应用中的 prerender:routes 事件钩子详解
- 【问题解决】Tomcat由低于8版本升级到高版本使用Tomcat自带连接池报错无法找到表空间的问题
- 【FAQ】HarmonyOS SDK 闭源开放能力 —Vision Kit
- 六、Spring Boot集成Spring Security之前后分离认证流程最佳方案
- 《JVM第7课》堆区
- .NET 8 高性能跨平台图像处理库 ImageSharp
- 还在为慢速数据传输苦恼?Linux 零拷贝技术来帮你!
- 刚毕业,去做边缘业务,还有救吗?
- 如何避免 HttpClient 丢失请求头:通过 HttpRequestMessage 解决并优化
- 让性能提升56%的Vue3.5响应式重构之“版本计数”