1. 程式人生 > >對撲克牌字串陣列進行排序

對撲克牌字串陣列進行排序

對於一個撲克牌字串陣列進行排序,這裡使用的是一個笨辦法,不管字串是數字還是字母,轉為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 ;
	}
}