首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

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

编程知识
2024年09月10日 20:07

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

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

敬请斧正!

From:https://www.cnblogs.com/BT-Blog/p/18407197
本文地址: http://shuzixingkong.net/article/1916
0评论
提交 加载更多评论
其他文章 ToCom:一次训练随意使用,华为提出通用的ViT标记压缩器 | ECCV 2024
标记压缩通过减少冗余标记的数量(例如,修剪不重要的标记或合并相似的标记)来加快视觉变换器(ViTs)的训练和推理。然而,当这些方法应用于下游任务时,如果训练和推理阶段的压缩程度不匹配,会导致显著的性能下降,这限制了标记压缩在现成训练模型上的应用。因此提出了标记补偿器(ToCom),以解耦两个阶段之间
ToCom:一次训练随意使用,华为提出通用的ViT标记压缩器 | ECCV 2024 ToCom:一次训练随意使用,华为提出通用的ViT标记压缩器 | ECCV 2024 ToCom:一次训练随意使用,华为提出通用的ViT标记压缩器 | ECCV 2024
Go runtime 调度器精讲(二):调度器初始化
原创文章,欢迎转载,转载请注明出处,谢谢。 0. 前言 上一讲 介绍了 Go 程序初始化的过程,这一讲继续往下看,进入调度器的初始化过程。 接着上一讲的执行过程,省略一些不相关的代码,执行到 runtime/asm_amd64.s:rt0_go:343L: (dlv) si asm_amd64.s:
Go runtime 调度器精讲(二):调度器初始化 Go runtime 调度器精讲(二):调度器初始化 Go runtime 调度器精讲(二):调度器初始化
Redis集群slot迁移改造实践
Redis集群经常需要进行在线水平扩缩容,实际操作过程中发现迁移期间服务时延剧烈抖动,业务侧感知明显,为了应对以上问题对原生Redis集群slot迁移功能进行优化改造。
Redis集群slot迁移改造实践 Redis集群slot迁移改造实践 Redis集群slot迁移改造实践
日志与追踪的完美融合:OpenTelemetry MDC 实践指南
前言 在前面两篇实战文章中: OpenTelemetry 实战:从零实现分布式链路追踪 OpenTelemetry 实战:从零实现应用指标监控 覆盖了可观测中的指标追踪和 metrics 监控,下面理应开始第三部分:日志。 但在开始日志之前还是要先将链路追踪和日志结合起来看看应用实际使用的实践。 通
日志与追踪的完美融合:OpenTelemetry MDC 实践指南 日志与追踪的完美融合:OpenTelemetry MDC 实践指南 日志与追踪的完美融合:OpenTelemetry MDC 实践指南
声明式 Shadow DOM:简化 Web 组件开发的新工具
在现代 Web 开发中,Web 组件已经成为创建模块化、可复用 UI 组件的标准工具。而 Shadow DOM 是 Web 组件技术的核心部分,它允许开发人员封装组件的内部结构和样式,避免组件的样式和行为影响全局页面。然而,传统的 Shadow DOM 实现方式需要通过 JavaScript 显式地
声明式 Shadow DOM:简化 Web 组件开发的新工具
.NET 多版本 WinForm 开源控件库 SunnyUI
前言 给大家推荐一款开源的 Winform 控件库,可以帮助我们开发更加美观、漂亮的 WinForm 界面。 项目介绍 SunnyUI.NET 是一个基于 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 开源控件库,同时也提供了工具类库、扩展
.NET 多版本 WinForm 开源控件库 SunnyUI .NET 多版本 WinForm 开源控件库 SunnyUI .NET 多版本 WinForm 开源控件库 SunnyUI
剖析 Redis List 消息队列的三种消费线程模型
Redis 列表(List)是一种简单的字符串列表,它的底层实现是一个双向链表。 生产环境,很多公司都将 Redis 列表应用于轻量级消息队列 。这篇文章,我们聊聊如何使用 List 命令实现消息队列的功能以及剖析消费者线程模型&#160;。 1 核心流程 生产者使用&#160;LPUSH key
剖析 Redis List 消息队列的三种消费线程模型 剖析 Redis List 消息队列的三种消费线程模型 剖析 Redis List 消息队列的三种消费线程模型
Activity启动模式
Activity启动模式 1. Activity启动模式介绍 1.1 任务栈 在Android开发中,任务栈(Task Stack)是一个非常重要的概念,主要用于管理应用程序中的Activity及其启动模式。它帮助开发者了解当用户在不同应用之间切换,或者应用内部不同Activity之间跳转时,系统如
Activity启动模式 Activity启动模式 Activity启动模式