问题描述
扑克牌排序:构造扑克牌数组,对扑克牌进行排序。排序原则如下:数字从小到大是2-10、J、Q、K和A,花色从小到大是方块(diamond)、梅花(club)、红桃(heart)、黑桃(spade)。两张牌比较时先看数字,数字相同时看花色。要求对输入的扑克牌进行从小到大排序。
输入五张牌(表示黑桃2、红桃3、黑桃3、方块A和梅花J): 2 s 3 h 3 s A d J c
输出结果应为:2 s 3 h 3 s J c A d数组长度固定为5。
输入五张牌(表示黑桃2、红桃3、黑桃3、方块A和梅花J): 2 s 3 h 3 s A d J c
输出结果应为:2 s 3 h 3 s J c A d数组长度固定为5。
样例输出
与上面的样例输入对应的输出。
例:
![](http://lx.lanqiao.cn/RequireFile.do?fid=T9mNjTr7)
例:
数据规模和约定
输入数据中每一个数的范围。
1 import java.util.ArrayList; 2 import java.util.Scanner; 3 4 import java.util.*; 5 import java.lang.Math; 6 class Main { 7 public static void main(String[] args) { 8 Scanner input = new Scanner(System.in); 9 String s = input.next(); 10 String[] s1 = s.split("d|c|h|s"); 11 A[] a = new A[s1.length]; 12 for(int i=0;i<s1.length;i++){ 13 a[i] = new A(); 14 a[i].data1 = s1[i]; 15 if(s1[i].equals("10")){ 16 a[i].data = "91"; 17 } 18 if(s1[i].equals("J")){ 19 a[i].data = "92"; 20 continue; 21 }else if(s1[i].equals("Q")){ 22 a[i].data = "93"; 23 continue; 24 } 25 else if(s1[i].equals("K")){ 26 a[i].data = "94"; 27 continue; 28 }else if(s1[i].equals("A")){ 29 a[i].data = "95"; 30 continue; 31 } 32 a[i].data = s1[i]; 33 } 34 List<A> list = new ArrayList<>(); 35 int h = 0; 36 for(int i=0;i<s.length();i++){ 37 if(s.charAt(i)=='d'){ 38 a[h].color = 1; 39 a[h].color1 = "d"; 40 list.add(a[h++]); 41 }else if(s.charAt(i)=='c'){ 42 a[h].color = 2; 43 a[h].color1 = "c"; 44 list.add(a[h++]); 45 }else if(s.charAt(i)=='h'){ 46 a[h].color = 3; 47 a[h].color1 = "h"; 48 list.add(a[h++]); 49 }else if(s.charAt(i)=='s'){ 50 a[h].color = 4; 51 a[h].color1 = "s"; 52 list.add(a[h++]); 53 } 54 55 } 56 Collections.sort(list); 57 for(A b:list){ 58 System.out.print(b.data1+b.color1+" "); 59 } 60 } 61 62 } 63 class A implements Comparable<A>{ 64 String data; 65 String data1; 66 String color1; 67 int color; 68 @Override 69 public int compareTo(A o) { 70 // TODO Auto-generated method stub 71 if(data.equals(o.data)){ 72 return color-o.color; 73 }else{ 74 return data.compareTo(o.data); 75 } 76 } 77 }