2017-03-27 44 views
-2

我將從我擁有的代碼開始。使用選擇排序 - java卡片組

public class DeckOfCards2 { 
    public static void main(String[] args) { 
    int[] deck = new int[52]; 
    String[] suits = {"Spades", "Hearts", "Diamonds", "Clubs"}; 
    String[] ranks = {"Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"}; 

    // Initialize cards 
    for (int i = 0; i < deck.length; i++) { 
     deck[i] = i; 
    } 

    // Shuffle the cards 
    for (int i = 0; i < deck.length; i++) { 
     int index = (int)(Math.random() * deck.length); 
     int temp = deck[i]; 
     deck[i] = deck[index]; 
     deck[index] = temp; 
    } 

    // Display the all the cards 
    for (int i = 0; i < 52; i++) { 
     String suit = suits[deck[i]/13]; 
     String rank = ranks[deck[i] % 13]; 
     System.out.println(rank + " of " + suit); 
    } 
    } 
} 

這是我正在做的事情,不知道該怎麼做。我是一名初學者。我需要幫助,請:

  • 創建一個隨機卡陣列。 (已完成)
  • 輸出使用的toString 方法(未分類)。這個陣列中的格式化打印語句(沒有這樣做,但是我不知道如何讓這部分內容。)
  • 使用的選擇排序排序的數組(不知道如何)
  • 使用toString方法輸出一個有序數組。升序 按字母順序排列:俱樂部(最低),其次是鑽石,心臟和 黑桃(最高)。 (不知道如何獲得這份訂單打印)這個排名用於橋牌遊戲。
  • 也打印出數字迭代。 (容易的,我放)
+1

我們不能爲你做所有的功課。這些都是用你自己的知識完成的非常簡單的事情。如果你遇到一個_Specific_事物,那就回來問問這裏。請參見[如何創建最小,完整和可驗證的示例](https://stackoverflow.com/help/mcve) – Orin

回答

0

對於選擇排序算法搜索裏面有很多的文章和例子Google

從簡單的例子開始瞭解算法。然後用它來完成你的任務。
該示例使用數字並與<,>運算符進行比較。但對於卡,你可以創建另一個其中通過對子級的名字比較兩個卡方法:

Ace of Clubs < 2 of Clubs 
6 of Hearts < 3 of Spades 

所以同一花色內只是比較ranks數組的索引。對於不同的套裝比較指數suits陣列。陣列必須在它之前預分類。所以suits陣列應該是:

String[] suits = {"Clubs", "Diamonds", "Hearts", "Spades"}; 

因此,對於前面例子中的比較是:

Ace of Clubs < 2 of Clubs => // because ranks[0] < ranks[1] and 0 < 1, the suit doesn't matter 
6 of Hearts < 3 of Spades => // because suits[2] < suits[3] and 2 < 3, the rank doesn't matter 

希望這將在您的研究有所幫助。

+0

因此,兩個數組都應該按順序? – jweaver

+0

是的。如果你需要套裝的升序或降序字母順序,'suits'數組可以在運行期間定購。但是我想''等級'應該在操作之前手動排序。因爲你必須解釋** Ace <3 **和** Jack mortalis

+0

這個程序應該是Ace的黑桃A對俱樂部的降序順序爲西裝和所以一直到2。我能夠找到一點點,但現在它已經從該套裝的A - 2的套裝組合在一起。我似乎無法弄清楚如何保持排名,但要訂購這些牌的套裝。 – jweaver

0
import java.util.*; 

public class Dealer { 

public static void main(String[] args){ 
    ArrayList<Card> cards = new ArrayList<Card>(); 
     for (Suits s : Suits.values()) { 
     for (Cards r : Cards.values()) { 
      Card value = new Card(s,r); 
      cards.add(value); 
     } 
    } 
    shuffle(cards); 
    present(cards); 
    System.out.println(); 
    cards = selectionSort(cards); 
    present(cards); 
} 
private static void shuffle(ArrayList<Card> list){ 
    Collections.shuffle(list); 
} 
private static void present(ArrayList<Card> list){ 
    int count = 0; 
    for (Card c : list){ 
     count++; 
     System.out.println(c.toString()); 
    } 
} 
private static ArrayList<Card> selectionSort(ArrayList<Card> list){ 
    int min; 
    int count = 0; 
    for (int i = 0; i < list.size(); i++) { 
     count++; 
     // Assume first element is min 
     min = i; 
     for (int j = i + 1; j < list.size(); j++) { 
      if (list.get(j).Get() < list.get(min).Get()) { 
       min = j; 



} 
    } 

if(min != i){ 
    final Card temp = list.get(i); 
    list.set(i,list.get(min)); 
    list.set(min,temp); 
} 

    // System.out.println(list.get(i));// I print the in ascending order 
} 
System.out.println("================================== Sorted Deck Below ========================================================="); 
System.out.println("It took "+count+" iterations to sort this deck using selection sort."); 
System.out.println(); 
return list; 

} 

private static ArrayList<Card> InsertionSort(ArrayList<Card> list){ 
    int count = 0; 
    for (int i = 1; i < list.size(); i++) { 
     Card temp = list.get(i); 
     int j; 
     for(j = i-1;j>=0&&temp.Get()<list.get(j).Get(); j--){ 
      list.set(j+1,list.get(j)); 
     } 
     list.set(j+1,temp); 
     count ++; 
    } 
    System.out.println("================================== Sorted Deck Below ========================================================="); 
    System.out.println("It took "+count+" iterations to sort this deck using insertion sort."); 
    System.out.println(); 
    return list; 
} 

public static ArrayList<Card> mergeSort(ArrayList<Card> list){ 
     if (list.size() ==1){ 
      return list; 
     } 
     else { 
      int mid= list.size()/2; 
      ArrayList<Card> left= new ArrayList<Card>(mid); 
      ArrayList<Card> right=new ArrayList<Card>(list.size()-mid); 



for (int i = 0; i < mid; i++) { 
      left.add(list.get(i)); 
     } 







for (int i = 0; i < list.size()-mid; i++) { 
      right.add(list.get(i)); 
     } 



left=mergeSort(left); 
    right=mergeSort(right); 
    merge(left,right,list); 
} 
return list; 

} 


public static void merge (ArrayList<Card>left,ArrayList<Card>right,ArrayList<Card>list){ 
     int i1=0;// left Index 
     int i2=0;// right Index 
     int ListIndex=0; 



for (int i = 0; i < list.size(); i++) { 
     if (i2>=right.size() || (i1<left.size() && (right.get(i)>=left.get(i)))) 
     { 
      list.set(ListIndex,left.get(i1)); 
      ListIndex++; 
     } 
     else { 
      list.set(ListIndex, right.get(i2)); 
      ListIndex++; 
     } 
    } 

} 

} 

=========================================== ================================

// Created enums 
enum Cards{ 
    Ace,King,Queen,Jack,Ten,Nine,Eight,Seven,Six,Five,Four,Three,Two 
} 

enum Suits{ 
    Spades, 
    Hearts, 
    Diamonds, 
    Clubs 
} 

public class Card{ 

private Suits suit; 
private Cards card; 

public Card(Suits suit, Cards card){ 


this.suit = suit; 
    this.card = card; 
} 

public int Get(){ 
    return (suit.ordinal())+card.ordinal()*4; 
} 

public String toString(){ 


    return card.toString()+" of " +suit.toString(); 
    } 
} 

這是我知道我問了一些之後我的朋友,他們說,嘗試ArrayList的對象卡,我相信現在是個人更難,因爲合併排序,我知道不工作,但我似乎無法弄清楚如何用ArrayList實現它。