2016-06-30 3 views
0

自分のコードにエラーメッセージは表示されません。 しかし、メインにコードを入力したときや、メソッドを呼び出すと、別の出力が得られます。出力の差異 - Java

例:私はメソッドを呼び出すとき

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

は、しかし、私は次の出力を得る:手動で任意の方法せずにメインの私のコードを実行するために

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


    } 

} 

、私は正しい出力が得られます:

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

何が間違っていますか?各カードには異なる値を持っているはずなので

+0

「私はメソッドを呼び出すと、」あなたは何を意味するのですか? 'main'メソッドを実行せずにどうやって実行していますか? –

+0

私がメソッドを呼び出すと、例えば:init()、print() – Aloysius

+1

デバッガを使って何が起こっているのか調べましたか? – Jens

答えて

2

あなたの次の静的メンバー

static String rank; 
static String suit; 

は、静的であってはならない。

String rank; 
String suit; 
+0

ありがとうございます。私の理解から、静的ではないクラスに属している属性を参照してくださいか? – Aloysius

+0

@Aloysius staticは、クラスのすべてのインスタンスが静的変数の単一インスタンスを共有することを意味します。したがって、すべてのCardインスタンスは、あなたのケースでは同じ 'rank'と' suit'を持っています。 – Eran

+0

ああ、変数の値と変わりません。私はこれを言う権利がありますか? – Aloysius