2017-03-27 4 views
-2

Ich werde mit dem Code beginnen, den ich habe.Verwendung der Auswahl sort - Java Kartenspiel

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); 
    } 
    } 
} 

Hier ist was ich versuche zu tun und weiß nicht, wie es geht. Ich bin ein Anfänger. Ich brauche Hilfe bitte:

  • Erstellen Sie ein Array von zufälligen Karte. (Bereits geschehen)
  • Ausgabe dieses Array in einer formatierten print-Anweisung eine toString Methode (unsortiert). (Nicht getan noch, aber ich weiß, wie man diese Rolle zu bekommen.)
  • Verwenden Sie die Auswahl sortieren Sie Ihre Array sortieren . (weiß nicht wie.)
  • Ausgabe eines sortierten Arrays mit der toString-Methode. Aufsteigend alphabetisch Reihenfolge: Vereine (niedrigste), gefolgt von Diamanten, Herzen, und Spaten (höchste). (Ich weiß nicht, wie ich diesen Auftrag zum Drucken bekommen soll) Dieses Ranking wird im Bridge-Spiel verwendet.
  • Auch die Anzahl Iterationen ausdrucken. (Einfach für mich setzen in zu)
+1

Wir können nicht alle Ihre Hausaufgaben für Sie erledigen.Dies sind ziemlich einfache Dinge, die Sie mit Ihrem eigenen Wissen erreichen können. Wenn Sie auf einem _Specific_ Ding stecken bleiben, dann kommen Sie zurück und fragen Sie hier. Siehe [Erstellen eines minimalen, vollständigen und überprüfbaren Beispiels] (https://stackoverflow.com/help/mcve) – Orin

Antwort

0

Für die Auswahl sortieren Algorithmus die Google suchen, die eine Menge von Artikeln und Beispiele hat:

Beginnen Sie mit einfachen Beispielen, um den Algorithmus zu verstehen. Dann benutze es für deine Aufgabe.
Die Beispiele verwenden Zahlen und vergleichen Sie mit <, > Operatoren. Aber für Karten können Sie eine andere Methode erstellen, die durch ihren Namen zwei Karten vergleichen whould:

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

So in der gleichen Farbe nur vergleichen Indizes von ranks Array. Vergleichen Sie für verschiedene Anzüge Indizes von suits Array. Die Arrays müssen vorher vorsortiert werden. So ist die suits Array sollten sein:

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

So ist der Vergleich zum vorherigen Beispiel wäre:

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 

Hope this bei Ihrem Recherche helfen.

+0

Also sollten beide Arrays in der richtigen Reihenfolge sein? – jweaver

+0

Ja. Das Array 'suits' kann zur Laufzeit bestellt werden, wenn Sie die alphabetische Reihenfolge der Farben aufsteigend oder absteigend benötigen. Aber ich denke, für die "Ränge" sollte es vor den Operationen manuell sortiert werden. Weil Sie das Programm erklären müssen, dass ** Ace <3 ** und ** Jack mortalis

+0

Die Reihenfolge, die sein soll, ist Ace of Spades zu Ace of Clubs, die in Buchstabenreihenfolge für die Farbe und absteigend sind so weiter mit dem Rest bis hinunter zu 2. Ich konnte ein kleines bisschen finden, aber jetzt hat es es durch den Anzug von A - 2 des Anzugs gruppiert. Ich kann mir nicht vorstellen, wie ich den Rang zusammenhalten soll, sondern die Farben der Karten bestellen. – 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(); 
    } 
} 

Dies ist, was ich weiß, habe, nachdem ich einige bat von meinen Freunden und sie sagten versuchen ArrayList der Objektkarte, die ich glaube, jetzt ist persönlich härter wegen der Merge Sort, die ich weiß, funktioniert nicht, aber ich kann nicht scheinen, herauszufinden, wie man es mit ArrayList implementieren.