华为JAVA的考试题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
预备知识1:生产者-消费者模式。在通信软件开发中,经常涉及到消息的处理,实现时会采用生产者-消费者模式:在同一个进程地址空间内执行的两个线程。生产者线程产生消息,然后将消息放置在一个缓冲区中供消费者线程处理。消费者线程从缓冲区中读取消息进行处理。当生产者线程产生消息时,如果缓冲区满,那么生产者线程必须等待消费者线程处理完消息以释放缓冲区。当消费者线程在读取消息进行处理时,如果缓冲区中没有消息,那么消费者线程将被阻塞,直到有消息被生产出来。
预备知识2:二叉树是一种特殊的树型结构,它的特点是每个结点至多只有二棵子树,并且,二叉树的子树有左右之分,其次序不能任意颠倒。中序遍历的顺序:(1)中序遍历左子树;(2)访问根结点;(3)中序遍历右子树。
题目内容:生产者从输入文件(文件名通过命令行给定,参见下述的“命令行使用接口”的“文件名”参数)中读取字符串结点信息并放入缓冲区,消费者从缓冲区中获取结点信息、创建二叉树、中序遍历生成的二叉树并在控制台打印出遍历的结点字符串(以逗号分隔)。
详细说明:
(1) 要读入的文件格式参见以下例子(参见随试题一起提供的附件文件source.txt):
12a,445,dd4,ddf,ddfg,33
以英文逗号“,”作为结点间分隔符,文件以回车换行符结束,中间无回车换行符,结点数目不定。注意所有字符仅包含字母和数字,不含中文字符、不含全角字符。
(2) 生产者线程从文件中读取字符串结点并存入缓冲区,缓冲区(Buffer)中允许的最大结点数为5。
(3) 消费者线程从缓冲区中读取结点信息,并创建二叉树。生成的二叉树应符合以下要求:中序遍历的结果与各结点字符串按ASCII字典顺序排序的结果一致。最后请在控制台打印出中序遍历的结果并结束线程。例如以上例子的中序遍历结果为:12a,33,445,dd4,ddf,ddfg
命令行使用接口:
Java BinaryTreeSort 文件名
“BinaryTreeSort”参数是你将要实现的主程序类名,该类有main方法public static void main(String[] args),是程序的入口;
“文件名”参数就是包含结点字符串的文件,例如source.txt,文件位于与运行程序相同目录下,无需考虑文件路径的问题。
控制台输出:
请输出中序遍历结果,以下是例子,结点间以英文逗号“,”分隔,中间无空格或其它字符。
12a,33,445,dd4,ddf,ddfg
参考提示1:比较字符串,可使用String的方法public int compareTo(String anotherString)
参考提示2:读入行请参考以下示例:
BufferedReader buffer = new BufferedReader(new FileReader(
" source.txt"));
String line = buffer.readLi
ne();
……