首页 > 编程语言 >Java实现英语作文单词扫盲程序

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

时间:2024-09-10 21:02:30浏览次数:1  
标签:doneList Java 作文 ArrayList list 单词 扫盲 word size

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

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

敬请斧正!

标签:doneList,Java,作文,ArrayList,list,单词,扫盲,word,size
From: https://www.cnblogs.com/BT-Blog/p/18407197

相关文章

  • 【JAVA线上问题解决】JAVA应用程序CPU持续飙高,如何排查问题,如何快速定位问题,解决问题?
    【JAVA线上问题解决】JAVA应用程序CPU持续飙高,如何排查问题,如何快速定位问题,解决问题?场景一、JAVA程序中某个线程占用CPU飙高,问题定位top、jstack命令的使用四步教你快速定位问题代码1.top命令获取异常的java进程PID   top2.查询异常进程中的线程情况,获取异常......
  • FreeSwitch之TTS 对接paddlespeech (windowsJava版)
    本来计划FreeSwitch通过tts_commandline对接第三方语音合成,但是由于在家安装的是windows版本,系统安装后mod缺少commandline模版,所以导致无法使用该模版。系统自带的TTS引起filter效果非常差,且不支持中文语音合成,导致在测试的过程中很多工作进行不下去。家里的电脑是windows10......
  • PaddleSpeech TTS API与流式速度对比(windows Java版)
    首先本地环境要安装部署PaddleSpeech语音识别系统,参考Windows10系统部署PaddleSpeech本地部署好后,根据官方文档启动TTS的流式服务,参考PaddleSpeech语音启用流式服务1、相关服务的启动 1.1本机启动TTSAPI服务paddlespeech_serverstart--config_file./demos/speech_ser......
  • 欢迎来到我的Java世界“抽象类”
    前言在上篇中我们学习到了继承的概念、语法等等,那么小编将来为大家方享下一篇Java中的抽象类。1.抽象类的概念2.抽象类的语法3.抽象类的特性4.抽象类的作用一:讲到抽象类,大家是不是会很迷惑什么是抽象类?在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并......
  • Java【类和面向对象】
    Java作为一种面向对象的编程语言,支持类、对象、继承、封装、多态、接口、抽象、方法、方法重载的概念。1.类和对象1.1基本概念1.1.1类(Class)一组相关属性和行为的集合。可以看成是一类事物的模板,用于定义对象的蓝图,包括属性和方法(描述该类事物)。1.1.2对象(Object)一类事物......
  • Java基础14
    Annotation注解理解:是从jdk5.0开始引入,,以“@注解名”在代码中存在>Annotation可以像修饰符一样被使用,可用于修饰包、类、构造器、方法、成员变量、参数、局部变量的声明。  还可以添加一些参数值,这些信息被保存在Annotation的"name=value"对中。>注解可以在类编译、运......
  • [Java并发]Concurrenthashmap的size()
    1.一致性定义关于一致性的定义,大概如下:一致性(Consistency)是指多副本(Replications)问题中的数据一致性。可以分为强一致性、顺序一致性与弱一致性。1.1强一致性(StrictConsistency)强一致性也被可以被称做:原子一致性(AtomicConsistency)线性一致性(LinearizableConsistency)要......
  • java----双列集合(Map)
    来看一下双列集合。我们知道,单列集合就是一次只能添加一个元素:单列集合: 双列集合一次可以存储两个值:一、双列集合特点:    1.双列集合一次需要存一对数据,分别为键和值    2.键不能重复,值可以重复    3.键和值是一一对应的,每个键只能找到......
  • JAVA —— IO流续
    复习一下上次的字节流 一、字符流1.Reader——FileReader 文件字符输入流——读字符数据进来2.Writer——FileWriter文件字符输出流——写字符数据进去  1.Reader——FileReader(文件字符输入流) publicstaticvoidmain(String[]args){ try( ......
  • Java中的修饰符
    1.访问权限修饰符访问权限分四种级别:公开级别:用public修饰,对外公开。受保护级别:用protected修饰,向子类及同一个包中的类公开。默认级别:没有访问权限修饰符,向同一个包中的类公开。私有级别:用private修饰,只有类本身可以访问,不对外公开。下图总结访问级别访问权限修饰符同......