題目描述
查找和排序
題目:輸入任意(用戶,成績)序列,可以獲得成績從高到低或從低到高的排列,相同成績都按先錄入排列在前的規則處理。
例示:
jack 70
peter 96
Tom 70
smith 67
從高到低
peter 96
jack 70
Tom 70
smith 67
從低到高
smith 67
Tom 70
jack 70
peter 96
注:0代表從高到低,1代表從低到高
輸入描述:
輸入多行,先輸入要排序的人的個數,然後分別輸入他們的名字和成績,以一個空格隔開
輸出描述:
按照指定方式輸出名字和成績,名字和成績之間以一個空格隔開
示例
輸入
3
0
fang 90
yang 50
ning 70
輸出
fang 90
ning 70
yang 50
題目分析
既然是個排序,那麼可以封裝成一個簡單的對象(User),然後可以使用好多種排序方法(比如:Arrays.sort()、Collections.sort()、TreeSet等)。
我這裏使用的是Arrays.sort方法,自定義比較器。
java代碼
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
/**
* 成績排序
*/
public class Main {
// 自定義實體類
private static class User {
String name;
Integer score;
User (String name, Integer score){
this.name = name;
this.score = score;
}
@Override
public String toString() {
return name + " " + score;
}
}
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String string;
while((string = reader.readLine()) != null){
// 數目
int count = Integer.parseInt(string);
// 降序:0,升序:1
int sortFlag = Integer.parseInt(reader.readLine());
// 存儲
User[] users = new User[count];
for (int i = 0; i < count; i++) {
String[] line = reader.readLine().split(" ");
users[i] = new User(line[0], Integer.parseInt(line[1]));
}
// 排序
if(sortFlag == 1){
Arrays.sort(users, Comparator.comparingInt(o -> o.score));
} else {
Arrays.sort(users, (o1, o2) -> o2.score - o1.score);
}
// 打印
for (User user : users) {
System.out.println(user);
}
}
}
}