题目:磁盘的容量单位有M、G、T,其关系为 1T = 1000G、1G = 1000M,如样例所示先输入磁盘的个数,再依次输入磁盘的容量大小,然后按照从小到大的顺序对磁盘容量进行排序并输出。
笔试的时候没做对~
当时想的是,把接收到的数据分成3个数组,开始写完发现不对,也没想到应该怎么写,今天搜了一下这个题目,忽然发现可以用TreeSet直接在获取数据的时候进行排序。
参考:https://www.cnblogs.com/codeapes666/p/12445607.html
笔试的时候这样写的:
package com.example.demo.examine;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* @Description
* 磁盘容量排序
* M G T 升序
* @Author Radish
* @Date 2020/3/16
*/
public class Rongliang {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
int n = in.nextInt();
String[] strs = new String[n];
for (int i = 0; i < n; i++) {
strs[i] = in.next();
}
//先转换后排序
//那都转换成M?
//或者不转,直接分成三段进行排序?可是如果不转每次比较大小的时候还是要转?
List<Integer> m = new ArrayList<>(n);
List<Integer> g = new ArrayList<>(n);
List<Integer> t = new ArrayList<>(n);
for (int i = 0; i < n; i++) {
if (strs[i].endsWith("M")){
m.add(Integer.valueOf(strs[i].substring(0,strs[i].length()-1)));
} else if (strs[i].endsWith("G")){
g.add(Integer.valueOf(strs[i].substring(0,strs[i].length()-1)));
} else if (strs[i].endsWith("T")){
t.add(Integer.valueOf(strs[i].substring(0,strs[i].length()-1)));
}
}
//对三段进行排序,然后一起输出
sort(m);sort(g);sort(t);
for (Integer i : m) {
System.out.println(i +"M");
}
for (Integer i : g) {
System.out.println(i + "G");
}
for (Integer i : t) {
System.out.println(i + "T");
}
}
}
public static void sort(List<Integer> list) {
for (int i = 0; i < list.size()-1; i++) {
for (int j = i+1; j < list.size(); j++) {
int temp = list.get(j);
if (list.get(j)<list.get(j-1)) {
list.set(j,list.get(j-1));
list.set(j-1,temp);
}
}
}
}
}
今天写的:
package com.example.demo.examine;
import java.util.*;
/**
* @Description
* 磁盘容量排序
* M G T 升序
* @Author Radish
* @Date 2020/3/16
*/
public class Rongliang2 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
int n = in.nextInt();
String[] strs = new String[n];
//先转换后排序
//那都转换成M?
//或者不转,直接分成三段进行排序?可是如果不转每次比较大小的时候还是要转?
//知道啦!利用TreeMap啊!
TreeSet<String> set = new TreeSet<>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
//直接获取单位,然后换算比较
int o11 = getO(o1);
int o22 = getO(o2);
if (o11 < o22) {
return -1;
}
if (o11 > o22) {
return 1;
}
return 0;
}
});
for (int i = 0; i < n; i++) {
// strs[i] = in.next();
set.add(in.next());
}
System.out.println(set);
}
}
private static int getO(String o1) {
int o11 = Integer.valueOf(o1.substring(0,o1.length()-1));
switch (o1.substring(o1.length()-1)) {
case "G":
o11 = o11 * 1000;
break;
case "T":
o11 = o11 * 1000000;
break;
}
return o11;
}
}