Java实现英语作文单词扫盲程序

news/2025/1/15 15:09:26/文章来源:https://www.cnblogs.com/BT-Blog/p/18407197

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

是否可以通过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菜鸟原创

敬请斧正!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/795152.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024.9.10 搜索引擎+字体

今天是人工智能的第一节课!我们主要学了引擎的搜索以及字体两部分,干货满满!有一种走了20年弯路的感觉(⊙︿⊙)第一次拥有了博客账号,在我小学的时候我妈妈会用博客记录生活,对于博客有一种熟悉的陌生感hhha 【知识小课堂1】 搜索引擎分为两类: 一、目录式分类搜索引擎,…

The Teachers Day gift a future teacher wants

`#include include void printBanner(); void printHeart(); void printFlower(); int main() { std::cout << "\n"; printBanner(); std::cout << std::endl; printFlower(); std::cout << std::endl; printHeart();return 0;}`点击查看代码 vo…

解决路由缓存问题

路由缓存问题即:当再vue3中使用带参数的路由时,随着路由跳转,组件被重新复用,不能正常执行生命周期 尤其我们通常在onMounted中使用的请求的发送,那么如何解决呢 1.粗暴的方法:强制替换销毁 vue官方曾说,key可以强制替换一个元素或者组件,而不是复用它 那么我们可以在组件中使用…

第二章python基本语法

位运算符 例1:检测列表里重复元素l=[1,3,5,7,8,3,9,4,2,5,6]flag=0for i in range(len(l)): if(1<<l[i]&flag)>0: print("重复:%d"%l[i]) flag|=(1<<l[i])#flag=flag|(1<<l[i]) 注:flag记录已经出现过的元素,其实用对应位为…

VS安装插件,按CTRL+鼠标左键进入函数

1。菜单栏-》工具-》扩展和更新 2.进入扩展和更新,点击联机,vs库,右上输入“Go To Definition” 3.搜索 出插件,选择作者是“Noah Richards” 4.下载安装重启即可hello,world~~~

【Azure Service Bus】创建 ServiceBus 的Terraform脚本报错GetAuthorizationRule: Invalid input

问题描述 在使用Terraform部署Service Bus时候,遇见了如下报错: Error: Error making Read request on Azure ServiceBus Topic Authorization Rule : servicebus.TopicsClient#GetAuthorizationRule: Invalid input: autorest/validation: validation failed: parameter=aut…

IIC工作模式时序分析

IIC工作模式时序分析 此处利用IO口模拟IIC通信过程中的时序。通信过程 在IIC通信过程SDA存在两种模式(接收模式和发送模式),发送或接受一个字节(器件的7个bit+1个bit方向(1 - 读方向,0 - 写方向)) 模式配置当SDA为接入模式接收了1字节数据后在第九个时钟脉冲期间就要变…

第四章 视图(views)

4.视图 4.1 文件or文件夹4.2 相对和绝对导入urls注意实现:不要再项目根目录做相对导入。 原则:绝对导入 相对导入(层级深)4.3 视图参数 urlpatterns = [path(login/, account.login, name="login"),path(auth/, order.auth, name=auth), ]from django.shortcuts …

[设计模式] Cola-StateMachine : 一个轻量实用的Java状态机框架

1 概述:状态机 1.0 状态机 vs 工作流在介绍状态机之前,先介绍一个工作流(WorkFlow),初学者通常容易将两个概念混淆。工作流(WorkFlow),大体是指业务过程(整体或者部分)在计算机应用环境下的自动化,是对工作流程及其各操作步骤之间业务规则的描述。在计算机系统中,工…

Qml 实现瀑布流布局

最近在刷掘金的时候看到一篇关于瀑布流布局的文章,然鹅他们的实现都是前端的那套,就想着 Qml 有没有类似实现。 结果百度了一圈也没有( T_T Qml 凉了凉了 ),于是,我按照自己理解,简单实现了一个 Qml 版的瀑布流布局。【写在前面】 最近在刷掘金的时候看到一篇关于瀑布流布…