这是一道笔试题,在网上也看到一些人解答的,总感觉不好,今天我就花了一点时间整理了一下,在这里分享一下,如有什么地方不正确的地方还需多多指出!
题目要求:输入一组数字,以逗号分隔,然后可选择升或者降序对其排序,这里我将根据用户输入按键A、D进行升、降序操作
下面贴出代码:
package com.interview.test;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
/**
* 现在输入一组数字,以逗号分开;然后按可选择的A升或者D降序进行排序
* 注:这里的排序是采用TreeSet,所以没有重复的,如果输入重复的数字只算一个数字
* @author Administrator
*
*/
public class ByCommaSort {
public static void main(String[] args) throws Exception{
System.out.println("请您输入一组数字,以‘,’分隔:");
String str = new BufferedReader(new InputStreamReader(System.in)).readLine();
System.out.println("选择排序方式A:升序,D:降序");
int c = new BufferedReader(new InputStreamReader(System.in)).read();
sort(str,c);
}
/**
* 排序
* @param str 排序字符串
* @param c A升序 D降序
*/
private static void sort(String str,int c) {
str = str.replaceAll("\\D+", ",");//如:提取df67中67
TreeSet<Integer> set = null;
if(c==65){
set = new TreeSet<Integer>();
}else if(c==68){
set = new TreeSet<Integer>(new MyComparator());
}
// 当然也可以使用StringTokenizer进行拆分字符串
// StringTokenizer commaToken = new StringTokenizer(str,true,",");
String[] array = str.split(",");
for(String s :array){
if(s.matches("\\d+")){
set.add(Integer.parseInt(s));
}
}
print(set);
}
/**
* 打印结果
* @param set排序好的数据
*/
private static void print(TreeSet<Integer> set) {
Iterator itor = set.iterator();
System.out.print("排序结果:");
while(itor.hasNext()){
System.out.print(itor.next()+",");
}
}
}
/**
* 重写comparator中compare方法以实现让TreeSet降序排序
* @author Administrator
*
*/
class MyComparator implements Comparator{
public int compare(Object o1, Object o2) {
if(o1.equals(o2))
return 0;
return ((Comparable)o1).compareTo(o2)*-1;
}
}
这篇博客分享了一道笔试题的解决方案,涉及将一组以逗号分隔的数字进行升序或降序排序。作者提供了代码实现,允许用户通过输入'A'或'D'来选择排序方式。
2360

被折叠的 条评论
为什么被折叠?



