单词默写助手实现

  • 1、设计思路
    • 1.1、步骤一:创建单词默写测试类SpellTest(主功能类)
      • 1.1.1、功能1:添加单词
      • 1.1.2、功能二:默写测试
      • 1.1.3、功能三:单词词源设置
      • 1.1.4、 SpellTest类完整代码
    • 1.2、步骤二:创建单词Word类
    • 1.3、步骤三:创建每日词汇类DailyVocabulary
    • 1.4、实现效果

1、设计思路

1.1、步骤一:创建单词默写测试类SpellTest(主功能类)

根据单词的特性,在存储单词上我使用了HashMap来作为容器,词意与拼写正好组合成一对,为了便于遍历,我使用了List集合来存储这些装有词汇的容器,当需要使用时,直接遍历即可。

1.1.1、功能1:添加单词

添加单词我设计了两种方式,一种是根据字符串添加词意和拼写;另一种是使用word类对单词进行封装。如下:

   /*** 根据拼写和词意添加一个单词* @param spell 全拼写* @param meaning 词意*/public void addWord(String spell,String meaning){Map<String, String> map = new HashMap<String, String>();map.put(meaning,spell);wordList.add(map);}/*** 根据单词对象添加一个单词* @param word 单词对象*/public void addWord(Word word){wordList.add(word.convertMap());}

每添加一个单词,都将其封装成map对象存入wordList集合当中去。

1.1.2、功能二:默写测试

有了词组之后我们就可以开始默写测试了,其实不考虑其他,只要求默写的话到这一步我们的程序就基本完成了。我们直接对wordList集合进行遍历即可。如下:

public void test(){System.out.println("=====================开始测试:");//遍历词组for (int i=0;i<wordList.size();i++){//获取当前词汇的key --> 词意meaningObject[] whole = wordList.get(i).keySet().toArray();System.out.println((i+1)+"——>"+whole[0]);//拼写wordSpell = sc.next();//将控制台输入的单词拼写与词组里的词汇进行比较if (wordList.get(i).get(whole[0]).equals(wordSpell)){System.out.println("拼写正确"+"\n"+"================================");}else{System.out.println("拼写错误"+"\n"+"================================");}}

但是仅仅这样的话测完了之后我们还得一个个往上翻,去找自己写错的单词,这样就比较麻烦了,所以我们可以用一个数组专门来存储拼写错误的单词的索引,这样一来,我们就可以在测试结束的时候利用数组中的索引从wordList容器中将写错的单词提取出来,使默写情况清晰的展示出来。当然,这种方式最后取出来的词并不是我们实际默写的单词,所以无法得知具体是怎么错了,如果希望展示错误的拼写情况,可以另外创建一个集合用于存储我们默写的单词,然后再根据索引将其取出,或者说只存取拼写错误情况下的词汇,只不过相较于前一种方式,在展示编号的时候后者可能相对麻烦一些。又或者说,我认为总是创建新的容器来存储很耗费空间,那么,我们也可以继续使用wordList这个容器,这个容器原先存储的是我们需要默写的词汇,假设它有5个词,那么在测试时,当它的词汇输出之后,我们需要从控制台输入这个单词的拼写,如果匹配不成功,那我们就可以用拼写错误的单词去覆盖当前正确的单词,并追加错误标志,以便展示时方便识别。说了这么多,也只是想告诉各位,一个程序的实现方式可以有很多,关键在于你怎么去思考,不要只纠结结果,思考的过程才是最重要的。
代码如下:

 //测试public void test(){System.out.println("=====================开始测试:");//遍历词组for (int i=0;i<wordList.size();i++){//获取当前词汇的key --> 词意meaningObject[] whole = wordList.get(i).keySet().toArray();System.out.println((i+1)+"——>"+whole[0]);//拼写wordSpell = sc.next();//将控制台输入的单词拼写与词组里的词汇进行比较if (wordList.get(i).get(whole[0]).equals(wordSpell)){System.out.println("拼写正确"+"\n"+"================================");count++;//计数菌}else{System.out.println("拼写错误"+"\n"+"================================");//存储当前错误词汇在词组中的索引值fault[faultIndex++] = count;faultCount++;//错误+1count++;//计数菌}}System.out.println("错误个数:"+faultCount);//当出现错误时,将错误的词汇显示出来if (faultCount>0){System.out.println("本次拼写错误如下:");showAllFalutWord();}}

1.1.3、功能三:单词词源设置

单词词源设置,就是设置单词的来源,这里我设计了三种方式:自定义填充、手动填充以及外部导入。

  • 自定义填充:相对于初始化方法,在里面进行单词的添加操作,用于设置一些经常忘记的词汇,以助于记忆。
  • 手动填充:就是利用循环去手动输入要测试的词汇,然后再测试(每次都要输入一遍,特别麻烦,当时觉得手动输入的过程中也能够帮助记忆,现在想想真是蛋疼QAQ)
  • 外部导入:和自定义填充类似,只不过将数据放在了其他的类里面,这样更加方便管理,主要用于每日单词的默写。

1.1.4、 SpellTest类完整代码

package word;import java.util.*;/*** @Author: 黑虎阿福* @Date: 2021/12/5 10:33* @Version: 1.0*/
public class SpellTest {//单词集合List<Map<String,String>> wordList;static Scanner sc = new Scanner(System.in);//单词拼写:用于test使用String wordSpell;//拼写失误的单词集合int fault[] = new int[100];//记录错误个数int faultCount = 0;//记录错误索引int faultIndex = 0;//用于遍历计数int count = 0;public SpellTest(){wordList = new ArrayList<Map<String,String>>();}public SpellTest(String spell, String meaning){this();addWord(spell,meaning);}public SpellTest(Word word){this();addWord(word);}/*** 根据拼写和词意添加一个单词* @param spell 全拼写* @param meaning 词意*/public void addWord(String spell,String meaning){Map<String, String> map = new HashMap<String, String>();map.put(meaning,spell);wordList.add(map);}/*** 根据单词对象添加一个单词* @param word 单词对象*/public void addWord(Word word){wordList.add(word.convertMap());}/*** 获取拼写错误的单词个数*/public int getFaultCount(){return faultCount;}/*** 获取所有的错误拼写单词*/public void showAllFalutWord(){//        //如果第一个单词错误处理标志
//        int flag = 0;for (int i = 0;i < faultCount; i++){System.out.println((fault[i]+1)+"——>"+wordList.get(fault[i]));
//            if (fault[i]!=0)
//                System.out.println((fault[i]+1)+"——>"+wordList.get(fault[i]));
//            else if (flag!=1 && fault[i]==0) {//                System.out.println((fault[i]+1)+"——>"+wordList.get(fault[i]));
//                flag = 0;
//            }else {//                break;
//            }}}//测试public void test(){System.out.println("=====================开始测试:");//遍历词组for (int i=0;i<wordList.size();i++){//获取当前词汇的key --> 词意meaningObject[] whole = wordList.get(i).keySet().toArray();System.out.println((i+1)+"——>"+whole[0]);//拼写wordSpell = sc.next();//将控制台输入的单词拼写与词组里的词汇进行比较if (wordList.get(i).get(whole[0]).equals(wordSpell)){System.out.println("拼写正确"+"\n"+"================================");count++;//计数菌}else{System.out.println("拼写错误"+"\n"+"================================");//存储当前错误词汇在词组中的索引值fault[faultIndex++] = count;faultCount++;//错误+1count++;//计数菌}}System.out.println("错误个数:"+faultCount);//当出现错误时,将错误的词汇显示出来if (faultCount>0){System.out.println("本次拼写错误如下:");showAllFalutWord();}}//创建测试类对象static SpellTest spellTest = new SpellTest();//手动填充public static void nonautomatic(){String spell = "";String meaning = "";int i = 0;while (i<2){System.out.println("请填充要默写的单词==================");System.out.print("spell:");spell = sc.next();System.out.print("meaning:");meaning = sc.next();spellTest.addWord(new Word(spell,meaning));i++;}//测试spellTest.test();}//引入外部填充public  void introduceExternal(List<Map<String,String>> wordList){this.wordList = wordList;//测试spellTest.test();}public static void main(String[] args) {//nonautomatic();//手动填充//auto();//自定义填充spellTest.introduceExternal(new DailyVocabulary().day3());//引入外部填充}//自定义填充public static void auto(){spellTest.addWord("obligition","n.责任,义务");spellTest.addWord("praise","赞赏、赞美、赞扬");spellTest.addWord("already","adv.已经");spellTest.addWord("plane","n.平面、飞机; v.滑翔;  adj.平坦的");spellTest.addWord("grade","n.等级、品级、级别、 v. 分级、分等、给(某个职位)评定级别");spellTest.addWord("degree","n.度、程度、级别、度数(温度单位)");spellTest.addWord("spade","n.铲、锹; v.拿铲子铲、拿铲刀铲开");spellTest.addWord("instance","n.实例、例子;   v.举...为例 ");spellTest.addWord("deposit","v.放下、放置、存钱、使(沉淀)、(使)沉积;  n. 存款、押金、订金、堆积物");spellTest.addWord("apology","n.道歉、辩护、辩解");spellTest.addWord("universal","n.普遍的、通用的、全世界的");spellTest.addWord("devote","v.致力、献身、倾注");spellTest.addWord("sell","n.让人失望的东西;  v. 出让、转让、出售、售卖  ; adj.出售的、销路好的");spellTest.addWord("respectively","adv.各自地、分别地");spellTest.addWord("prosperous","adj.繁荣的、成功的、兴旺的");spellTest.addWord("police","n.警察、警察部门  v.监督、巡察、维护治安、管制");spellTest.addWord("truck","n.卡车、拖车 v. 开卡车、用卡车运");spellTest.addWord("thirsty","adj.渴望的、渴求的、口渴的、干旱的");spellTest.addWord("nose","n.鼻子、机头、嗅觉、 v. 小心翼翼的向前移动、拱");spellTest.addWord("sport","n.体育运动  v.炫耀、卖弄、嬉戏");spellTest.addWord("bedroom","n.卧室  adj.两性关系的");spellTest.addWord("shake","n.摇动、抖动、颤动、颤抖  v.摆脱、动摇、摇动");spellTest.addWord("chapter","n.篇章、回;  v.把...分成章节");spellTest.addWord("seize","v.抓住、捉拿、夺、没收");spellTest.addWord("refuse","n.废物、垃圾;  v.拒绝、回绝");spellTest.addWord("logic","n.逻辑、逻辑学、思维方式");spellTest.addWord("penny","n.分、便士");spellTest.addWord("towel","n.毛巾、手巾、纸巾;  v.用毛巾擦干");spellTest.addWord("safety","n.安全、安全性、平安");spellTest.addWord("communication","n.传达、传递、传播、通信、通讯、交际、交往、交流、联系、消息、书信");spellTest.addWord("superficial","adj.肤浅的、表面的、表层的、外面的");spellTest.addWord("our","adv.我们的用于称上帝或圣人;  pron.我们的");spellTest.addWord("variety","n.品种、变化、多样化");spellTest.addWord("question","n.问题、疑问;  v.问、怀疑、质询");spellTest.addWord("clockwise","adv.顺时针方向地;  adj.顺时针方向的");spellTest.addWord("principle","n.原则、原理、基本观念、道德原则");spellTest.addWord("finish","n.抛光、结局、结尾;  v.完成、做好");spellTest.addWord("minority","n.少数派、少数群体、少数民族");spellTest.addWord("desease","n.病、疾病、恶疾");spellTest.addWord("lot","n.批、命运、全部、全体;  pron.许多、大量;  adv.非常(与动词连用)、许多、大量;  v.抽签、划分");spellTest.addWord("or","conj.或者、否则、不然;");spellTest.addWord("anyway","adv.无论如何、不管怎样");spellTest.addWord("dose","n.一次、一剂(药的)、一份、剂量、服用量;  v.给(某人)服药");spellTest.addWord("fat","n.肥肉、脂肪;  adj.肥的、肥胖的、厚的、宽大的;  v.养肥");spellTest.addWord("senate","n.参议院(美国、加拿大等国家的两个立法机构之一)");spellTest.addWord("victory","n.胜利");spellTest.addWord("concentrate","v.专心于、集中、全神贯注、聚集");spellTest.addWord("recognition","n.认出、识别、承认、认可");//开始测试spellTest.test();}}

1.2、步骤二:创建单词Word类

主要用于对单词的封装,便于后期我们对单词添加其他特性,例如词性、用法等等。目前在程序中仅用于对单词封装。

package word;import java.util.HashMap;
import java.util.Map;/*** @Author: 黑虎阿福* @Date: 2021/12/5 10:35* @Version: 1.0*/
public class Word {String spell;String meaning;public Word() {}public Word(String spell, String meaning) {this.spell = spell;this.meaning = meaning;}public void setSpell(String spell) {this.spell = spell;}public void setMeaning(String meaning) {this.meaning = meaning;}public String getSpell() {return spell;}public String getMeaning() {return meaning;}public Map convertMap(){Map<String, String> map = new HashMap<String, String>();map.put(meaning,spell);return map;}@Overridepublic String toString() {return "Word{" +"spell='" + spell + '\'' +", meaning='" + meaning + '\'' +'}';}
}

1.3、步骤三:创建每日词汇类DailyVocabulary

主要用于对每日词汇的管理,同样使用List集合存储词汇,使用Map存储单个单词,通过不同的方法添加每天需要背的单词,当我们需要复习前面的单词时也可以同时调用不同时期的添加单词的方法,以此达到阶段性的复习。

package word;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** @Author: 黑虎阿福* @Date: 2021/12/5 15:41* @Version: 1.0*///每日词汇
public class DailyVocabulary {//每日词组List<Map<String,String>> wordGroup;public DailyVocabulary(){wordGroup = new ArrayList<Map<String, String>>();}//添加迟到到词组中public void add(String spell,String meaning){Map<String,String> words = new HashMap<String, String>();words.put(spell,meaning);wordGroup.add(words);}/*** @Date 2021/12/5* @return 词组集合*/public  List<Map<String,String>> day1(){add("n.长袍、法衣;  v.对付、成功应付、妥善处理、竞争、斗争","cope");add("n.(一)条、一条面包、长方形的一大块;  v.游荡、闲逛、闲混、虚度","loaf");add("n.人、人员、个人、某人","person");add("n.任命、委派、约会、预约、职务、职位","appointment");add("n.连接处、接合点;  v.加入、参加","join");add("prep.(与动词连用、表示朝某处或某位置运动) 向、朝向","onto");add("n.缆绳、钢索、电缆、电报;  v.发电报","cable");add("n.危机、危急关头","crisis");add("n(v).崇敬、崇拜(神)、敬仰、热爱","worship");add("adj.较低的、南部的、【地质学、地理学】早期的、下游的;  v.降低、减少","lower");add("adj.巨大的、极多的、程度高的、非常成功的","huge");add("adj.潜在的、可能的;  n.潜力、潜能、潜在性、可能性","potential");add("n.饥饿、饥荒、渴求、饥饿感;  v.饥饿、使饥饿","hunger");add("n.压力、紧迫、紧张、强调、重要性;  v.着重、强调、重读","stress");add("n.护理、照顾、小心、照料;  v.关心、关怀、关注","care");add("n.期望、期待、预期","expectation");add("n.云、云朵、阴影、一团;  v.使难以理解、使记不清楚","cloud");add("n.疯子;  adj.精神的、心理的、脑力的","mental");add("n.结石、宝石、岩石;  v.向..投石头;  adj.石制的;  adv.石一般的","stone");add("n.[人名]尼斯;  adj.令人愉快的、吸引人的","nice");add("n.夏季、夏天;  v.避暑、使度过夏季;  adj.夏季的","summer");add("n.护照、通行证","passport");add("n.核心、精髓;  adj.最重要的、主要的、基本的、核心的;  v.去掉(水果)的果心","core");add("n.无限、无尽的事务;  adj.无限的、无穷无尽的","infinite");add("n.家庭教师、私人教师;  v.教、任课","tutor");return wordGroup;}/*** @Date 2021/12/4* @return 词组集合*/public  List<Map<String,String>> day2(){add("n.最终的事物、基本事实;  adj.最后的、最终的","ultimate");add("n.千、无数;  adj.千、无数的","thousand");add("n.(正式)先生、绅士、正人君子","gentleman");add("n.奖励、回报、报酬;  v.奖励、奖赏、给予报酬","reward");add("n.鼓、滚筒;  v.击鼓、打鼓、连续敲打","drum");add("n.政府、政体、内阁","government");add("n.语言、言语、说话","language");add("n.胜利","victory");add("n.现在;  adv.现在、目前","nowadays");add("n.草稿、草图;  adj.粗糙的、不平滑的、高低不平的;  v.虐待、惹怒;  adv.粗鲁地、粗野地","rough");add("n.欢迎、接待;  v.(打招呼)欢迎、迎新;  adj.令人愉快的、受欢迎的","welcome");return wordGroup;}/*** @Date 2021/12/6* @return 词组集合*/public  List<Map<String,String>> day3(){add("n.核武器主义者;  adj.原子能的、核能的、核武器的","nuclear");add("n.染料、燃油;  v.加燃料、加油","fuel");add("n.跳跃、剧增、急变;  v.跳跃、越过;  adj.闰年的","leap");add("v.假装、佯装、自称、模拟;  adj.假装的、想象的","pretend");add("n.预防措施、防备","precuation");add("n.过去、昔日、(某人)过去的经历;  adj.过去的、昔日的、刚过去的;  prep.超过、晚于、在...之后;  adv.经过、逝去;  v.'pass'的过去分词","past");add("n.使尴尬、使窘迫、使为难","embarrass");add("n.高一或大一新生、新手","freshman");add("n.醉汉、酒鬼;  adj.沉醉、陶醉;  v.'drink'的过去分词","drunk");add("n.威胁、恐吓、危及;  v.同'threaten'","threat");add("adj.缺席的、缺少的、心不在焉的;  v.缺席、不参加;  prep.没有、缺乏","absent");add("n.打扫、清扫;  adj.洁净的、干净的;  v.除去...的灰尘、使干净;  adv.完全地","clean");add("n.清理、清除;  adj.清晰的、易懂的;  v.使清楚、使清晰;  adv.清晰地、清楚地","clear");add("n.替换物、取舍;   adj.可选择的、可替代的","alternative");add("n.增加、增多;  v.增加、增多","increase");add("n.令人讨厌的人(或事)、内径、口径;  v.使厌烦、开凿、挖掘","bore");add("n.饮料、酒;  v.喝、喝酒、饮酒、(尤指)酗酒","drink");add("n.(事件或活动)带来的收入;  v.进行进行、接着做","proceed");add("n.十四岁、十四的记号;  num.十四","fourteen");add("v.刺激、激励、促使","stimulate");add("n.人;  adj.人的、人本性的有人情味的","human");add("v.飞、航行;  n.苍蝇;  adj.机灵的、机紧的","fly");add("n.法庭、法院、球场、宫廷、求婚;  v.追求、求婚","court");add("v.接受、承认、同意、认可","accept");add("n.惊讶、惊奇、意外;  v.使惊讶、使诧异;  adj.出乎意料的","surprise");return wordGroup;}/*** 阶段复习1* @return 词组集合*/public List<Map<String,String>> phaseReview1(){day1();day2();return wordGroup;}
}

1.4、实现效果

java实现单词默写助手,强烈建议new-hand收藏相关推荐

  1. java设计单词英译汉小助手_C语言实现单词小助手功能完善版

    本文为大家分享了完善版的C语言单词小助手的具体实现代码,供大家参考,具体内容如下 一.题目分析 1.在原有代码基础上添加文档注释,函数注释及语句注释,使代码风格良好,易于阅读和修改. 2.完善功能,实 ...

  2. java设计单词英译汉小助手_单词小助手C语言版

    单词小助手,要求完成以下任务: 1.改写程序为良好程序风格(文档注释,函数注释,语句注释). 2.将单词测试中的功能完善,可针对做错的单词重复记忆. 3.查询单词的功能添加英文词查询,中文查询的功能完 ...

  3. 零基础学Java程序有什么好的建议

    ​ java技术的快速发展,引起了很多人的关注,尤其是一些零基础人群,都想通过学习java技术来改善自己的职业,那么零基础学Java程序有什么好的建议呢?来看看下面的详细介绍. ​ 零基础学Java程 ...

  4. python爬虫架构师之路_一位资深 架构师大牛给予Java技术提升的学习路线建议

    一位资深 架构师大牛给予Java技术提升的学习路线建议 对于工作多年的程序员而言,日后的职业发展无非是继续专精技术.转型管理和晋升架构师三种选择. 架构师在一家公司有多重要.优秀架构师需要具备怎样的素 ...

  5. 在JAVA中记录日志的十个小建议

    JAVA日志管理既是一门科学,又是一门艺术.科学的部分是指了解写日志的工具以及其API,而选择日志的格式,消息的格式,日志记录的内容,哪种消息对应于哪一种日志级别,则完全是基于经验.从过去的实践证明, ...

  6. Java程序员的职业生涯规划建议

    Java程序员的职业生涯规划建议 第一部分:零基础或基础薄弱的同学 这部分主要适用于尚未做过Java工作的同学,包括一些在校生以及刚准备转行Java的同学. 一.Java基础 首先去找一个Java的基 ...

  7. java英语单词测试_Java 英语单词自测

    Java英语单词自测小游戏 编写初衷 记英语单词的时候,不知道记没记住,所以写了个检测的程序,在检测的同时,也能够复习之前学习的. 任务目标 创建数据库 Java编写代码(没写成GUI,觉着写成GUI ...

  8. 11、java常用单词(转载)

    abstract (关键字) 抽象 ['.bstr.kt] access vt.访问,存取 ['.kses]'(n.入口,使用权) algorithm n.算法 ['.lg.riem] annotat ...

  9. JAVA常用单词汇总

    Java 常用英语汇总 abstract (关键字) access 抽象 ['.bstr.kt] vt.访问,存取 ['.kses]'(n.入口,使用权) n.算法 ['.lg.riem] algor ...

  10. 猫头鹰的深夜翻译:在JAVA中记录日志的十个小建议

    前言 首先,这篇文章没有进行任何的日志功能的详细介绍,而是对日志提出了几种最佳实践.适合对日志记录有所了解的同学阅读. 下面是正文: JAVA日志管理既是一门科学,又是一门艺术.科学的部分是指了解写日 ...

最新文章

  1. install tabix/bgzip
  2. [异常解决] 安卓6.0权限问题导致老蓝牙程序出现异常解决办法:Need ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission...
  3. linux traceroute 命令 查看路由表
  4. Python 基础语法(一)
  5. 【Paper】2018_多无人机协同编队控制算法研究_林倩玉
  6. 栈的应用-四则运算表达式
  7. 在Eclipse自带的built-in server里运行PHP文件
  8. 关于Android studio run 按钮灰色无法运行的总结
  9. 《云计算:概念、技术与架构》一1.1 本书目标
  10. 免费字典api ,查询汉字完整信息
  11. ubuntu cd 改变路径
  12. 用计算机表白的数字,用数字表白的句子大全 如何用数字表白一段话
  13. SQL Tuning学习杂记
  14. 金融领域7大数据科学案例
  15. 收集整理近700套微信朋友圈h5小游戏源码合集大放送
  16. 技术宅日记:机器学习修炼的每一步
  17. 需求分析——功能需求和非功能需求
  18. WeNet语音识别实战
  19. python投票问题,程序列出在python中获得多数投票的候选人
  20. 一些适合程序员玩的游戏

热门文章

  1. 第二关练习讲解(下部)
  2. (P24)进程间通信介绍二:死锁 ,信号量与PV原语 ,用PV原语解决司机与售票员问题 ,用PV原语解决民航售票问题 ,用PV原语解决汽车租赁问题
  3. iCaRL: Incremental Classifier and Representation Learning
  4. 《打造游戏开源平台 GameHub 》by:eli.ocean
  5. 代换密码的密码分析—详细分析过程
  6. DELPHI XE2马上推出
  7. 全网首发ai绘画小程序基于novelai
  8. 新浪微博批量取消关注
  9. java script 验证电话_jquery验证手机号是否正确实例讲解
  10. excel数据可视化