Java习题笔记(1)

(一)题目:

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

 

 

Input Param 

     n               输入随机数的个数     

 inputArray      n个随机整数组成的数组 

     

Return Value

     OutputArray    输出处理后的随机整数

 


注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。

输入描述:

 
 

输入多行,先输入随机整数的个数,再输入相应个数的整数

输出描述:

 
 

返回多行,处理后的结果


(二)解答:首先理解题意,我们需要做的是进行“去重”和“排序”工作,测试用例是电脑生成的,其输入顺序是:先输入随机整数的个数,再输入相应个数的整数,因此:

(a)可先获取随机整数的个数

(b)再获取随机整数,但要保证随机整数的个数

思路:(1)自己封装“去重”函数和“排序”函数,就可以达到目的

           (2)Java中有一些已经封装好的方法,比如sort()方法可以排序,可直接拿来使用,当然还有一些特殊的数据结构,比如set集合不能存储重复的元素,其存储的元素具有无序唯一的特点;list集合中存储的元素具有有序,可重复的特点,那么此时我们是否可以先将随机数列存入set集合中去掉重复的元素,使元素变得唯一,然后再存入list集合中进行排序,这样可以合理的利用数据结构的优势简化工作量。在具体一点,Set集合包括HashSetTreeSet;List集合包括ArrayListLinkedListVector等。发现既满足排序又满足唯一性。选择TreeSet。

在eclipse中编写如下代码:


结果:


但在网页编译器上总是测试不通过,显示如下结果:



思考并找原因,发现题意未理解清楚,自己一开始读取的就是随机数的具体内容,并没有读取随机数的个数:




(三)总结:

(1)Java中键盘录入的方法

(a)方法一:接受字符串

注:read()方法返回值是int类型,当到达字符串末尾返回-1.    readLine()方法返回的是字符串


(b)方法二:Scanner类接收字符串




(c)一次只能接收一个字符



(2)TreeSet集合如何保证元素的唯一性和不可重复性?

这是一个值得探讨的问题,待学习后后续补充

猜你喜欢

转载自blog.csdn.net/jaybillions/article/details/80739915