【问题标题】:Displaying the contents of an array (of strings) in JOptionPane在 JOptionPane 中显示数组(字符串)的内容
【发布时间】:2012-07-29 10:34:59
【问题描述】:

我这里有三个类,它们要求输入并且应该在对话框中显示一个字符串数组。

第 1 类:

public class Card {

  public int rank;
  public int suit;
  public String rankName;
  public String suitName;
  public String cardName;

  public Card () {
    rank = 0;
    suit = 0;
    rankName = "";
    suitName = "";
    cardName = "";
  }

  public int getRank() {
    return rank;
  } 
  public void setRank(int rank) {
    this.rank = rank;
  }
  public int getSuit() {
    return suit;
  }
  public void setSuit(int suit) {
    this.suit = suit;
  }
  public String getRankName() {
    return rankName;
  }
  public void setRankName(String rankName) {
    this.rankName = rankName;
  }
  public String getSuitName() {
    return suitName;
  }
  public void setSuitName(String suitName) {
    this.suitName = suitName;
  }
  public String getCardName() {
    return cardName;
  }
  public void setCardName(String cardName) {
    this.cardName = cardName;
  }
}

Class 2 - 这是我应该输出存储在数组中的字符串的类。我认为我在做仿制药部分的方向是正确的,但我不喜欢那样做。请指导我打印所有这些。

import javax.swing.JOptionPane;

public class Deck {

    public void assignIntegerValues(Card card) {
        //Card card = new Card();
        String[] suitNameArray = {"Clubs", "Spades", "Hearts", "Diamonds"};
        String[] rankNameArray = {"Ace", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King"};
        List<Card> cardName = new ArrayList();

        card.setSuitName  (suitNameArray[card.getSuit()-1]);
        card.setRankName (rankNameArray[card.getRank()-1]);
        card.setCardName (card.getSuitName() + "-" + card.getRankName());
        JOptionPane.showMessageDialog(null, card.cardName);
    }

    public void displayAll (Card card) {
        for (int i=0; i<card.cardName.length(); i++) {
            String print = JOptionPane.showMessageDialog(null, card.cardName[i]);
        }
    }
}

第 3 类:

import javax.swing.JOptionPane;

public class DisplayDeck {

    public static void main(String[] args) {

        Card card = new Card();
        Deck deck = new Deck();
        int answer;
        String again;

        do {
            String suitString = JOptionPane.showInputDialog("Suit: ");
            card.setSuit (Integer.parseInt(suitString));

            String rankString = JOptionPane.showInputDialog("Rank: ");
            card.setRank (Integer.parseInt(rankString)); 

            deck.assignIntegerValues(card);
            String answerString = JOptionPane.showInputDialog("Try again? (1/0) ");
            answer = Integer.parseInt(answerString);
        } while (answer == 1);

        deck.displayAll(card);

    }
}

我正在尝试显示用户输入的 cardNames。

【问题讨论】:

  • 你想显示什么?
  • 您好,先生。我正在尝试显示用户输入的cardNames
  • 另见Card
  • @ConorSherman,我添加了List&lt;Card&gt; cardName = new ArrayList&lt;Card&gt;)(),我认为它与cardName.add(somethingHere)有关,我只是不知道语法。

标签: java arrays string swing


【解决方案1】:
public void displayAll (Card[] cards) {
    String output = "";
    for (int i=0; i<cards.length(); i++) {
        output += cards[i].getCardName() + "\n";
    }
    JOptionPane.showMessageDialog(null, output);
}

你需要一个数组传入 displayAll 否则你只有一张卡片。

然后在实际创建 JOptionPane 之前构建输出字符串。

【讨论】:

  • 哦,我明白了。太感谢了!如果我要在另一个 DisplayDeck 类中调用 displayAll,那么参数应该是什么?谢谢
  • 一组卡片。 Card[] cards = new Card[Size Here];卡片[0] = 新卡片(); ...
【解决方案2】:

另一种方法取决于Deck 拥有一个集合,每个新的Card 都添加到该集合中:

class Deck {
    private List<Card> cards = new ArrayList<Card>();
    ...
}

如果Card 覆盖toString()

@Override
public String toString() {
    return cardName;
}

那么displayAll()就变得很简单了:

public void displayAll() {
    JOptionPane.showMessageDialog(null,
        new JScrollPane(new JList(cards.toArray())));
}

【讨论】:

  • 非常感谢! public String toString 是否属于 Card 类?当我运行程序时,JOptionPane 什么都不显示。
  • 是的,我选择在Card 中覆盖toString()。老实说,我的最初也没有显示任何内容。我忽略了add() 每个new Card()List&lt;Card&gt; cards
  • 对不起,我不明白。不知道你指的是哪个add?像这样添加cards.add((Card) cards);?很抱歉,我是Java新手。不过谢谢!
  • 是的,Card card = new Card(); cards.add(card),注意单数;如果您使用上面的通用声明,则不必将 Card 转换为 add() 它。
  • 谢谢!我应该把它们放在assignIntegerValues 里面吗?由于 Eclipse 说Duplicate local variable card,我将两次出现的卡更改为card1,但仍然无法正常工作。即使我把它放在displayAll 里面。非常抱歉,谢谢。
猜你喜欢
  • 2012-07-29
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
相关资源
最近更新 更多