2017-01-10 3 views
-2

У меня есть класс карты, которая выглядит следующим образом:метод ToString класса

public class Card 
{ 
    //instance variables 
    private String faceValue; //the face value of the card 
    private String suit; //the suit of the card 
    String[] ranks = {"Ace", "2", "3", "4", "5", "6","7", "8", "9", "10", "Jack", "Queen", "King"}; 
    String[] suits = {"Clubs", "Diamonds", "Hearts", "Spades"}; 

    /** 
    * Constructor 
    */ 
    public Card() 
    { 
     for (int i = 0; i < 13; i++) 
     { 
      for (int j = 0; j < 4; j++) 
      { 
       faceValue = ranks[i]; 
       suit = suits[j]; 
      } 
     } 
    } 

    //getters 
    /** 
    * Getter for faceValue. 
    */ 
    public String getFaceValue() 
    { 
     return faceValue; 
    } 

    /** 
    * Getter for suit. 
    */ 
    public String getSuit() 
    { 
     return suit; 
    } 
    //end of getters 

    //methods 
    /** 
    * This method returns a String representation of a Card object. 
    * 
    * @param none 
    * @return String 
    */ 
    public String toString() 
    { 
     return "Dealed a card: " + faceValue + " of " + suit; 
    } 
} 

И еще один класс Деки, который использует класс карты для создания массива:

public class Deck 
{ 
    //instance variables 
    private Card[] deck; 

    /** 
    * Constructor for objects of class Deck 
    */ 
    public Deck() 
    { 
     deck = new Card[52]; 
    } 

    /** 
    * String representation. 
    */ 
    public String toString() 
    { 
     return "Dealed a card: " + deck.getFaceValue() + " of " + deck.getSuit(); 
    } 
} 

Мой метод ToString является давая мне ошибку «не могу найти символ - метод getFaceValue()». То же самое для getSuit(). Любые идеи почему?

+2

'deck' - это массив' Card', а не 'Card'. Массивы не имеют этих двух методов. – resueman

+3

Массивы не имеют методов. Элементы массивов имеют методы. – bmargulies

+1

Вы можете просто вернуть 'Arrays.toString (deck)', который даст список всех строк карты. –

ответ

0

здесь некоторые возможные пути решения вашей проблемы, как предложено:

public String toString() 
{ 
    return Arrays.toString(deck); 
} 

или цикл через всю палубу

public String toString() 
{ 
    String deckInStringForm = "[ "; 
    for(int indexOfCard = 0; indexOfCard < deck.length; indexOfCard++) 
    { 
     deckInStringForm += deck[indexOfCard] + " "; 
    } 
    deckInStringForm += "]"; 

    return deckInStringForm; 
} 

или изменения/добавления функции взять индекс, как так

public String toString(int index) 
{ 
    return "Card " + index + ": " + deck[index].toString(); 
} 
1

deck - это массив Card[] deck. Следовательно, вы не можете вызывать метод getFaceValue() и getSuit() на нем, потому что эти 2 метода являются частью класса Card и NOT массива карт.

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