对于一个扑克牌字符串数组进行排序,这里使用的是一个笨办法,不管字符串是数字还是字母,转为char型数组后对每一个值进行加权,即设置一个映射值。通过对映射值得比较和冒泡排序,实现真实值的排序。代码如下:
public class Sort{
public static void main(String[] args){
String[] str = {"2","Q","J","K","10","9","8","7","6","5","4","3","A"} ;
char[] c = new char[13] ; //定义一个字符数组存储字符串
for(int i = 0; i < str.length; i++){
if(str[i].equals("10")) str[i] = "0" ; //将数字10变为0
c[i] = str[i].toCharArray()[0] ; //对每一个String变为char类型放在字符数组的对应位置
}
sort(c) ;
String[] str2 = new String[13] ;
for(int i = 0; i < c.length ; i++ ){
if(c[i] == '0') str2[i] = "10" ; //再将char类型变回String类型
else str2[i] = c[i] + "" ;
}
for(String s : str2) System.out.print(s + " ") ; //遍历输出字符串
System.out.println() ;
}
public static char[] sort(char[] c){ //用来对char型数组进行排序的方法
for(int i = 0; i < c.length - 1; i++){ //冒泡排序
for(int j = 0; j < c.length - 1 - i; j++){
int value1 = 0 ; //定义每个字符的映射
switch(c[j]){ //对每一个字符定义一个映射值(虚拟值)
case '3' : value1 = 1 ; break ;
case '4' : value1 = 2 ; break ;
case '5' : value1 = 3 ; break ;
case '6' : value1 = 4 ; break ;
case '7' : value1 = 5 ; break ;
case '8' : value1 = 6 ; break ;
case '9' : value1 = 7 ; break ;
case '0' : value1 = 8 ; break ;
case 'J' : value1 = 9 ; break ;
case 'Q' : value1 = 10 ; break ;
case 'K' : value1 = 11 ; break ;
case 'A' : value1 = 12 ; break ;
case '2' : value1 = 13 ; break ;
default : value1 = 0 ;
}
int value2 = 0 ; //定义下一个字符的映射
switch(c[j + 1]){
case '3' : value2 = 1 ; break ;
case '4' : value2 = 2 ; break ;
case '5' : value2 = 3 ; break ;
case '6' : value2 = 4 ; break ;
case '7' : value2 = 5 ; break ;
case '8' : value2 = 6 ; break ;
case '9' : value2 = 7 ; break ;
case '0' : value2 = 8 ; break ;
case 'J' : value2 = 9 ; break ;
case 'Q' : value2 = 10 ; break ;
case 'K' : value2 = 11 ; break ;
case 'A' : value2 = 12 ; break ;
case '2' : value2 = 13 ; break ;
default : value2 = 0 ;
}
if(value1 > value2){ //判断如果值大于下一个值,交换两个字符的位置
char temp = c[j] ;
c[j] = c[j + 1] ;
c[j + 1] = temp ;
}
}
}
return c ;
}
}