2017-03-27 13 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 方法を使用してフォーマットprint文で、この配列は(まだ行っていないが、私はこの部分を取得する方法を知っています。)(まだ行って)
  • 使用して、あなたの配列をソートするために選択ソートを(方法は分かりません)
  • toStringメソッドを使用してソートされた配列を出力します。昇順 アルファベット順:クラブ(最下位)、それに続くダイヤモンド、ハート、および スペード(最高)。 (この注文を印刷する方法を知らない)このランキングは、橋のゲームで使用されます。
  • 番号の繰り返しも印刷します。 (私が入れしやすい)
+1

私たちはあなたの宿題をすべて行うことはできません。これらはあなた自身の知識で達成するための非常に単純化されたものです。あなたが_特定のものにこだわってしまった場合は、ここに戻って質問してください。 [最小限で完全で検証可能なサンプルを作成する方法](https://stackoverflow.com/help/mcve) – Orin

答えて

0

ソートアルゴリズム検索記事や例がたくさんありGoogle選択のため:

アルゴリズムを理解するための簡単な例を示します。それからあなたの仕事のためにそれを使用してください。
例は数字を使用し、<,>の演算子と比較します。しかし、カードのため、あなたはその名前で2枚のカードを比較whould別の方法を作成することができます。

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 of Spades残りの部分はすべて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++; 
     } 
    } 

} 

} 

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

これは私がいくつかの質問をした後に私が知っていることです私が知っているマージソートのために個人的にもっと難しいと思っているオブジェクトカードのArrayListを試してみましたが、ArrayListで実装する方法を理解できないようです。

関連する問題