明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
Input Param
n 输入随机数的个数
inputArray n个随机整数组成的数组
Return Value
OutputArray 输出处理后的随机整数
注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。
输入描述:
输入多行,先输入随机整数的个数,再输入相应个数的整数
输出描述:
返回多行,处理后的结果
(二)解答:首先理解题意,我们需要做的是进行“去重”和“排序”工作,测试用例是电脑生成的,其输入顺序是:先输入随机整数的个数,再输入相应个数的整数,因此:
(a)可先获取随机整数的个数
(b)再获取随机整数,但要保证随机整数的个数
思路:(1)自己封装“去重”函数和“排序”函数,就可以达到目的
(2)Java中有一些已经封装好的方法,比如sort()方法可以排序,可直接拿来使用,当然还有一些特殊的数据结构,比如set集合不能存储重复的元素,其存储的元素具有无序唯一的特点;list集合中存储的元素具有有序,可重复的特点,那么此时我们是否可以先将随机数列存入set集合中去掉重复的元素,使元素变得唯一,然后再存入list集合中进行排序,这样可以合理的利用数据结构的优势简化工作量。在具体一点,Set集合包括HashSet,TreeSet;List集合包括ArrayList,LinkedList,Vector等。发现既满足排序又满足唯一性。选择TreeSet。
在eclipse中编写如下代码:
结果:
但在网页编译器上总是测试不通过,显示如下结果:
思考并找原因,发现题意未理解清楚,自己一开始读取的就是随机数的具体内容,并没有读取随机数的个数:
(三)总结:
(1)Java中键盘录入的方法
(a)方法一:接受字符串
注:read()方法返回值是int类型,当到达字符串末尾返回-1. readLine()方法返回的是字符串
(b)方法二:Scanner类接收字符串
(c)一次只能接收一个字符
(2)TreeSet集合如何保证元素的唯一性和不可重复性?
这是一个值得探讨的问题,待学习后后续补充