来自背英语四级单词的突发奇想:

是否可以通过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个单词

随机生成5个单词,检查随机生成单词是否在doneList集合和nowList集合中重复。

  • 代码:
点击查看代码
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菜鸟原创

敬请斧正!

Java实现英语作文单词扫盲程序的更多相关文章

  1. 学习java需要英语很好吗?

    学习java需要英语很好吗? 编程语言起源于美国,是由英文构成的,其中包括几十个英文的关键字以及几百个英文的函数,除非需要对文本进行处理,否则一般不会出现中文.但是,它们都是孤立的单词,不构成任何语句 ...

  2. Java常用英语汇总(面试必备)

    Java常用英语汇总(面试必备) abstract (关键字)             抽象 ['.bstr.kt] access                            vt.访问,存 ...

  3. 【Storm】storm安装、配置、使用以及Storm单词计数程序的实例分析

    前言:阅读笔记 storm和hadoop集群非常像.hadoop执行mr.storm执行topologies. mr和topologies最关键的不同点是:mr执行终于会结束,而topologies永 ...

  4. Hadoop分布环境搭建步骤,及自带MapReduce单词计数程序实现

    Hadoop分布环境搭建步骤: 1.软硬件环境 CentOS 7.2 64 位 JDK- 1.8 Hadoo p- 2.7.4 2.安装SSH sudo yum install openssh-cli ...

  5. 洛谷P2786 英语1(eng1)- 英语作文

    题目背景 蒟蒻HansBug在英语考场上,挠了无数次的头,可脑子里还是一片空白. 题目描述 眼下出现在HansBug蒟蒻面前的是一篇英语作文,然而智商捉急的HansBug已经草草写完了,此时 他发现离 ...

  6. JAVA基础英语单词表(下)

    quantity                     / 'kwɔntiti /                    量,数量 query                             ...

  7. 使用 Java 开发兼容 IPv6 的网络应用程序

    根据现有 IPv4 地址的部署速度,剩余的地址将在 10 到 20 年被使用殆尽.因此网络逐渐从 IPv4 向 IPv6 转换是不可避免的,相应的各种网络应用程序都将支持 IPv6.对于 Java,从 ...

  8. 如何设置Java虚拟机内存以适应大程序的装载

    Java虚拟机对于运行时的程序所占内存是有限制的,当我们的项目或者程序很大时,往往会照成内存溢出. 举个例子: public class SmallTest1 { public static void ...

  9. Java 调用执行其他语言的程序

    以 Java 调用 Python 为例 1. 使用 Runtime 类 该方式简单,但是增加了 Java 对python 的依赖,需要事先安装python,及python程序依赖的第三方库 Runti ...

  10. 第一章 flex单词计数程序

    学习Flex&Bison目标, 读懂SQLite中SQL解析部分代码 Flex&Bison简介Flex做词法分析Bison做语法分析 第一个Flex程序, wc.fl, 单词计数程序 ...

随机推荐

  1. Java-泛型,枚举,注解

    1 泛型类 package demo; public class FanXingLei { public static void main(String[] args) { // TODO 自动生成的 ...

  2. Python爬虫(1-4)-基本概念、六个读取方法、下载(源代码、图片、视频 )、user-agent反爬

    Python爬虫 一.爬虫相关概念介绍 1.什么是互联网爬虫 如果我们把互联网比作一张大的蜘蛛网,那一台计算机上的数据便是蜘蛛网上的一个猎物,而爬虫程序就是一只小蜘蛛,沿着蜘蛛网抓取自己想要的数据 解 ...

  3. SQL Server 查询分析及优化方法

    一.影响速度的因素 没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) I/O吞吐量小,形成了瓶颈效应 没有创建计算列导致查询不优化 内存不足 网络速度慢 查询出的数据量过大(可以采 ...

  4. Django 实现文件上传下载API

    Django 实现文件上传下载API by:授客 QQ:1033553122 欢迎加入全国软件测试交流QQ群7156436 开发环境   Win 10   Python 3.5.4   Django- ...

  5. 解密prompt系列34. RLHF之训练另辟蹊径:循序渐进 & 青出于蓝

    前几章我们讨论了RLHF的样本构建优化和训练策略优化,这一章我们讨论两种不同的RL训练方案,分别是基于过程训练,和使用弱Teacher来监督强Student 循序渐进:PRM & ORM So ...

  6. 最佳 AI 翻译工作流:全世界最信达雅的翻译

    吴恩达老师提出了一种反思翻译的大语言模型 (LLM) AI 翻译工作流程--GitHub - andrewyng/translation-agent,具体工作流程如下: 提示一个 LLM 将文本从 s ...

  7. vue项目中实现sql编辑器功能自定义高亮词汇可提示关键词-codemirror

    先上图:左侧是数据库表,右侧上部是sql编辑器,下部是执行sql的返回接口 HTML: <el-row> <el-col :span="4" class=&quo ...

  8. Docker镜像构建:技术深度解析与实践指南

    本文深入分析了Docker镜像构建的技术细节,从基础概念到高级技术,涵盖了多阶段构建.安全性优化.性能提升及实战案例.旨在为专业人士提供全面的技术洞察和实用指导,以提升Docker镜像构建的效率和安全 ...

  9. 【Centos】RPM安装Mysql8

    先去官网下载RPM包,没想到RPM包是红帽发行版 https://dev.mysql.com/downloads/mysql/ 使用wget直接下载到Centos里面: wget https://cd ...

  10. Continue-AI编程助手本地部署llama3.1+deepseek-coder-v2

    领先的开源人工智能代码助手.您可以连接任何模型和任何上下文,以在 IDE 内构建自定义自动完成和聊天体验 推荐以下开源模型: 聊天:llama3.1-8B 推理代码:deepseek-coder-v2 ...