- 1、本文档共15页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
那一世 我翻遍十万经书 不为修来世 只为寻你的一丝气息
---引自《面向对象的前世今生》
本篇目的是演示:编程不是写代码,是做设计。
设计要求:
开发一个“英文单词学习软件”,其功能包括:
= 1 \* GB3 ① 文件中读取已保存的单词信息,单词在文件中的存放格式为一行一条单词,英文单词在前,中文解释在后,中间以一个空格分隔,如“teacher 教师”
= 2 \* GB3 ② 能力测试:在屏幕上随机显示一个英文单词,使用者输入中文解释,检查输入的中文解释是否正确,并给出对错信息。如果错误,给出正确的中文解释。当用户输入一个特殊单词(如end_)时终止测试,并给出本次测试的对错率。
首先,设计程序的总体处理流程:
= 1 \* GB3 ① 初始化功能:
打开保存单词信息的文本文件,将所有单词读入内存保存;
= 2 \* GB3 ② 单词测试:
随机挑选一个测试单词;
在屏幕上显示该单词的信息;
接收用户输入;
如果用户输入的是结束信息则结束程序,否则判断用户输入的是否正确答案并显示对应的提示信息(例如,如果回答正确显示“正确”,回答错误则显示正确答案);
回到 = 2 \* GB3 ②继续测试。
然后,初步进行设计规划
注意:是设计整个程序的代码框架,而不是代码编写。就像写作文前要先打个草稿,梳理思路,确定整篇文章分成哪几个主要段落,这些段落之间彼此如何互相呼应。同理,我们先要确定整个程序结构分成哪几个部分(即类)、彼此间是如何调用配合的、这些代码间的数据流向。
按照上述处理流程,我们很自然地设计出如下几个类,以及彼此间的调用关系:
class loadDictionary {
public loadDictionary(String filename);//功能:打开filename指定的文件,将所有单词信息读入内存。
}
class testVocabulary { //单词测试类
public void test() { //功能:单词测试:
while(true) {
随机挑选一个测试单词:设计为一个方法selectToken
在屏幕上显示该单词的信息:设计为一个方法showToken
接收用户输入;或者直接实现,或者设计为一个方法getAnswer
if(用户输入的是结束信息) break;
if(用户输入的不是正确答案) 显示答案(设计为一个方法showRightAnswer)
}
}
}
public class 主类{
public static void main(String args[]) {
loadDictionary ld = new loadDictionary(args[0]用命令行参数输入保存单词的文件名);
用命令行参数输入保存单词的文件名
testVocabulary test = new testVocabulary();
test.test();
}
}
设计数据结构:
关键问题:如何在内存中保存单词?
解决方法:数组、链表、哈希表、Vector等,此处为了简化设计,暂定为数组。数组中每个元素保存一个单词信息。
显然,我们需要增加一个单词类,该类的一个对象保存一个单词信息,设计如下:
class Token{
String china;
String english;
}
我们定义一个Token数组保存所有单词:Token tokens = new Token[1000]
因为我们并不知道文件中会保存多少个单词,所以暂定为1000(其实更好的办法是将1000用常量来代替,这样便于修改)。但这1000是上限,实际上一般文件中的单词数目都是小于1000的,这样为了知道tokens中实际保存的单词数目,我们再引入一个变量记录tokens数组中保存的实际单词数目:int totalTokens
很显然,loadDictionary类中的构造函数负责初始化tokens数组和totalTokens;而testVocabulary类中的代码也需要使用到tokens数组和totalTokens。这样tokens和totalTokens便应该被loadDictionary类和testVocabulary类的代码所共享,那我们如何定义tokens数组和totalTokens才能使其被loadDictionary类和testVocabulary类中的代码所共享?
如果是C++,很方便,将tokens数组和totalTokens变量定义为全局的即可,但Java不允许定义全局,奈之何?
为师有上、中、下三策供君抉择:
下策:
文档评论(0)