2016-06-30 5 views
0

В моем коде не появляется сообщение об ошибке. Тем не менее, я получаю разные выходы, когда я набираю код в основном и когда я вызываю свои методы.Разница в выходе - 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); 
    } 


    } 

} 

Для делать свои коды в основных вручную без каких-либо методов, я получу правильный вывод:

Eg

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

Но когда я называю методы, я получаю следующий результат :

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

спасибо. из моего понимания, не является ли static ссылкой на атрибут, принадлежащий классу? – Aloysius

+0

@ Статический атрибут Aloysius означает, что все экземпляры класса имеют один экземпляр статической переменной. Следовательно, все экземпляры Карты имеют одинаковый «ранг» и «костюм» в вашем случае. – Eran

+0

О, как в переменной значение не изменится. могу ли я сказать это? – Aloysius

Смежные вопросы