2016-06-30 12 views
0

In meinem Code wird keine Fehlermeldung angezeigt. Allerdings bekomme ich unterschiedliche Ausgaben, wenn ich meinen Code im Haupttext eintippe und wenn ich meine Methoden anrufe.Unterschied in der Ausgabe - Java

package card; 

import java.util.Arrays; 
import java.util.Random; 

/** 
* 

*/ 
public class Card { 

    /** 
    * @param args the command line arguments 
    */ 
    static String rank; 
    static String suit; 
    static String[] ranks = {"2","3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"}; 
    static String[] suits = {"Spades","Hearts", "Clubs", "Diamonds"}; 
    static Card[] deck = new Card[52]; 

    public Card(String rank, String suit) 
    { 
     this.rank = rank; 
     this.suit = suit; 
    } 

    public static String getRank() 
    { 
     return rank; 
    } 

    public static void setRank(String r) 
    { 
     rank = r; 
    } 

    public static String getSuit() 
    { 
     return suit; 
    } 

    public static void setSuit(String s) 
    { 
     suit = s; 
    } 





    public static void init(Card[] deck) 
    { 
     for(int x = 0; x<deck.length; x++) 
     { 
      Card newCard = new Card(ranks[x%13], suits[x/13]); 
      deck[x] = newCard; 
     } 
    } 

    public static void swap(Card[] deck, int a, int b) 
    { 
     Card temp = deck[a]; 
     deck[a] = deck[b]; 
     deck[b] = temp; 
    } 

    public static void shuffle(Card[] deck) 
    { 
     Random rnd = new Random(); 
     for(int x = 0; x<deck.length; x++) 
     { 
      swap(deck, x, (rnd.nextInt(deck.length))); 
     } 
    } 

    public static void print(Card[] deck) 
    { 
     for(int x =0; x<deck.length; x++) 
     { 
       System.out.println(deck[x].getRank() + " of " + deck[x].getSuit()); 
     } 

    } 


    public static void main(String[] args) { 
     // TODO code application logic here 


    for(int x = 0; x<deck.length; x++) 
    { 
     Card cards = new Card(ranks[x%13], suits[x/13]); 
     deck[x] = cards; 
     System.out.println(deck[x].getRank() + " of " + deck[x].getSuit()); 

     //init(deck); 
     //print(deck); 
    } 


    } 

} 

Für meine Codes im Haupt manuell ohne Methoden zu tun, werde ich die korrekte Ausgabe:

Eg

10 of Diamonds 
J of Diamonds 
Q of Diamonds 
K of Diamonds 

Aber wenn ich die Methoden aufrufen, ich folgende Ausgabe :

A of Diamonds 
A of Diamonds 
A of Diamonds 
A of Diamonds 
A of Diamonds 

Was ist falsch?

+0

Was Sie meinen „wenn ich die Methoden aufrufen“? Wie läuft es, ohne die 'main'-Methode auszuführen? –

+0

wenn ich die Methode rufe zB: init(), print() – Aloysius

+1

Hast du versucht einen Debugger zu benutzen, um herauszufinden was passiert ist? – Jens

Antwort

2

Ihre folgende statische Mitglieder

static String rank; 
static String suit; 

sollte nicht statisch sein, da jede Karte unterschiedliche Werte haben sollten:

String rank; 
String suit; 
+0

danke. Versteht sich statisch nach meinem Verständnis nicht auf Attribute, die zu der Klasse gehören? – Aloysius

+0

@Aloysius statisch bedeutet, dass alle Instanzen der Klasse eine einzelne Instanz der statischen Variable gemeinsam nutzen. Daher haben alle Card-Instanzen in Ihrem Fall den gleichen Rang und die gleiche Farbe. – Eran

+0

Oh, wie im Variablenwert wird sich nicht ändern. Habe ich recht, das zu sagen? – Aloysius