HP--day06--输入一组数去重并排序
在控制台输入一组数,去除重复的数字并按照升序顺序排列。
在控制台输入一组数,去除重复的数字并按照升序顺序排列。
从控制台读入数字,先通过scanner.next()读取字符串,然后再用 string.match("")方法通过正则表达式来验证是否是数字。升序可以通过冒泡排序、选择排序、插入排序等等 但是利用jdk提供的 Arrays.sort(数组名),这种方法执行效率比较高,一个问题有多种解决方法的同时还要考虑执行效率的问题。最后是去重,去重可能要先排序然后比较相邻的数字,相同的写入到另一个数组中,或者移动本数组的元素覆盖相同的数组元素。如果数量量非常大通过移动数组的元素来去重执行效率显然是非常低的。通过利用HashSet可以实现去重的效果,比较相同的数据在HashSet中只能出现一次。但是如果先排序按照升序的顺序通过add()方法添加到HashSet集合中,打印出来的却不是按照升序的顺序,因为HashSet的存放时按照哈希算法排序的,所以应当先 去重再排序。或者将HashSet去重后的数据放到List中(List是有序可重复的,HashSet是无序不可重复的) 。
然后通过iterator迭代输出HashSet中的数,再通过Arrays.sort()排序
<pre name="code" class="java">import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
import java.util.Arrays;
public class QuChong {
Scanner scanner = new Scanner(System.in);
int[] a = new int[100];
public static void main(String[] args) {
QuChong qc = new QuChong();
qc.start();
}
public void start() {
int count = inputa();// 获取输入了多少个数字
Set hashSet = new HashSet<Integer>();
for (int i = 0; i < count; i++) {
hashSet.add(a[i]);
}
Iterator<Integer> it = hashSet.iterator();
int countSet = 0;
int[] d = new int[hashSet.size()];
while (it.hasNext()) {
d[countSet++] = it.next();
}
Arrays.sort(d);// 对d数组从小到大排序
for (int i : d) {
System.out.print(i + ",");
}
}
// 判断并读取数字
public int inputa() {
int i = 0;
while (true) {
System.out.println("请输入第" + (i + 1) + "个数字");
String s = scanner.next();
if (s.matches("^[0-9]*$")) {// 利用正则表达式判断是否为数字
a[i++] = Integer.parseInt(s);
} else if (s.equals("n")) {
break;
}
}
return i;
}
}