问题描述
扑克牌排序:构造扑克牌数组,对扑克牌进行排序。排序原则如下:数字从小到大是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。
样例输出
与上面的样例输入对应的输出。
例:
例:
![](https://i-blog.csdnimg.cn/blog_migrate/ce4d4d397da8fbb63246d48b8e9b42a4.png)
数据规模和约定
输入数据中每一个数的范围。
/**
* 思路:将扑克牌的数字部分乘以10加上花色对应的值(自己设定)组成一个新的int数。
* 将新的int数组排序
* 输出
*/
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
String s1 = "";
String s2 = "";
String x1 = "dchs";//四中花色的数字分别为0123(下标)
String x2 = "0123456789SJQKA";
//将原字符串分成俩个子串,一个放数字部分,一个放花色部分
for(int i=0,j=1;i<s.length()-1;){
s1 = s1 + s.charAt(i);
s2 = s2 + s.charAt(j);
i = i+2;j = j+2;
}
int[] array = new int[s1.length()];
for(int k=0;k<array.length;k++){
//数组的值为数字在x2中的下标乘以10+花色在x1中的下标
//乘以10的目的是扩大比较时数字的作用
array[k] = x2.indexOf(s1.charAt(k))*10 + x1.indexOf(s2.charAt(k));
}
//排序
Arrays.sort(array);
//输出
for(int m=0;m<array.length;m++){
int shuzi = array[m]/10;
int huase = array[m]%10;
System.out.print(x2.charAt(shuzi) +""+ x1.charAt(huase) + " ");
}
}
}