Массив объектов в Массив строк

1

Я пытаюсь преобразовать ArrayList, который содержит "карты", или объекты, которые хранят два числа, ранг и костюм. Обычно для получения одного экземпляра карты я использую:

dealer.dealerhand.get(1).showstats();

Где showstats возвращает строку и:

public String showstats()
{
    String realsuit = "";
    if(this.suit == 0)
    {
        realsuit = "Diamonds";
    }
    else if(this.suit == 1)
    {
        realsuit ="Hearts";
    }
    else if(this.suit == 2)
    {
        realsuit = "Clubs";
    }
    else if(this.suit == 3)
    {
        realsuit = "Spades";
    }
    String str = "My rank is: " + this.rank + " My Suit is: " + realsuit;
    return str;
}

Я пробовал до сих пор:

 public String[] getStats()
{
    String[] dealerstats = this.dealerhand.toArray(new String[this.dealerhand.size()]);
    return dealerstats;
}

а также

 public String[] getStats()
{
    String[] dealerstats = {""};
    for(int i = 0; i < this.dealerhand.size(); i++)
    {
        dealerstats[i] = (dealerhand.get(i).showstats());
    }
    return dealerstats;
}

Но они оба не работают. Конечной целью будет массив строк из карт в файле ArrayList дилера, который я распечатаю с помощью JList. Благодарю!

  • 0
    Что не так с тем, что вы пробовали?
  • 0
    Последняя часть кажется правильной, вы получаете ошибку?
Показать ещё 1 комментарий
Теги:
arrays
arraylist
oop

3 ответа

1
Лучший ответ

Для этого:

 public String[] getStats() {
    for(int i = 0; i < this.dealerhand.size(); i++) {
        dealerstats[i] = (dealerhand.get(i).showstats());
    }
    return dealerstats;
}

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

 public String[] getStats(Dealer dealer) { // Input a dealer
    String[] dealerstats = new String[dealer.dealerhand.size()]; // Initialize String array
    for(int i = 0; i < this.dealerhand.size(); i++) {
        dealerstats[i] = dealerhand.get(i).showstats();
    }
    return dealerstats;
}

Я также предполагаю, что у вас есть объект Dealer, поскольку вы, похоже, ссылаетесь на него в своем вопросе.

  • 0
    Спасибо, он дал мне [Ljava.lang.String; @ 56f7ce53, когда я распечатал его на консоли. Кажется, такая глупая ошибка
  • 0
    @ user3413170 Вы печатаете адрес. Как ты это печатаешь?
Показать ещё 3 комментария
1

Ваша вторая попытка почти правильна. Вы создали массив, но не указали правильный размер. Размер String[] dealerstats должен быть размером с dealerhand ArrayList:

public String[] getStats()
{
    String[] dealerstats = new String[ dealerhand.size() ];

    for( int i = 0; i < dealerstats.length; ++i )
         dealerstats[i] = dealerhand.get(i).showstats();

    return dealerstats;
}
  • 1
    О, он отредактировал вопрос .. спасибо за обновление.
0

Если вы определяете метод toString() в классе Card вы можете распечатать ArrayList без какого-либо преобразования (здесь пример Live Ideone):

public class Card{
    ...
    @Override public String toString(){
        return "My rank is: " + this.rank + " My Suit is: " + this.suit;
    }
}

Тогда вы можете просто использовать:

List<Card> dealerCards = new ArrayList<Card>();
dealerCards.add(new Card(5, "Hearts"));
dealerCards.add(new Card(10, "Diamonds"));

System.out.println(dealerCards);

Результат: ["My rank is: 5 My Suit is: Hearts", "My rank is: 10 My Suit is: Diamonds"]

  • 0
    На самом деле это очень полезно. Я пошел дальше и использовал решение kevinrmannix, но я попробую это.
  • 1
    Нет проблем. Если вы хотите более объектно-ориентированный подход, это улучшит ясность и длину вашего кода в долгосрочной перспективе.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню