【问题标题】:The array of strings does not display in JOptionPane字符串数组不显示在 JOptionPane 中
【发布时间】:2012-07-29 21:39:10
【问题描述】:

这些类在编译时的最终工作要求输入,并且应该在对话框中显示一个字符串数组。

一级

public class Card {

    private int rank;
    private int suit;
    private String rankName;
    private String suitName;
    private 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;
    }

    public String toString() {
        return cardName;
    }

}



2 级。我感谢垃圾神。但是,问题出在哪里。它不会在对话框中显示字符串数组。它什么也不显示。

import java.util.*;

import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;

public class Deck {

    public List<Card> cards = new ArrayList<Card>();

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

        card.setSuitName  (suitNameArray[card.getSuit()-1]);
        card.setRankName (rankNameArray[card.getRank()-1]);
        card.setCardName (card.getSuitName() + "-" + card.getRankName());
        JOptionPane.showMessageDialog(null, card.getCardName());
        Card card1 = new Card(); 
        cards.add(card1);
    }

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


}



第三类

import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;

public class DisplayDeck {

    public static List<Card> cards = new ArrayList<Card>();

    public static void main(String[] args) {

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

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

    }
}

非常感谢!

【问题讨论】:

  • 是的,当然是家庭作业。 @Gabby:请提前回答作业问题并使用作业标签。
  • 谢谢大家。其实这不是“功课”。它只是让我们在即将到来的考试中练习。
  • @Gabby:这只是语义,这仍然是家庭作业——你在家做的学校作业。再次,请坦率地说。这是您应该首当其冲的工作,以便从中学到最多。
  • 在同一主题上另见previous question

标签: java arrays swing joptionpane


【解决方案1】:

该问题与未显示的数组(或更好的 ArrayList)无关。问题是列表中没有任何有用的信息,因此没有什么可显示的。

代码只是在做你写的事情。你不会在你的牌组中添加任何包含任何有意义信息的牌。看看你在 Deck 的List&lt;Card&gt; 中添加了什么:

Card card1 = new Card(); 
cards.add(card1);

您每次都添加一个默认 Card 对象,但没有添加任何有意义的信息。所有有意义的信息都被丢弃了。由于这是家庭作业,我会请你重新考虑如何做得更好。

【讨论】:

  • 谢谢先生。 “有意义的信息”在cardName。所以我尝试了cards.add(card.getcardName());,但它是错误的。我仍然不喜欢 Java 的语法。
  • @Gabby:不,即使 cardName 中有有意义的信息,您也可以通过创建一个没有任何信息的空白新 Card 对象并将其添加到列表中来丢弃它。看看你在哪里添加任何等级或价值信息到你添加到列表中的 Card 对象 card1?给我看那段代码(提示:它不存在)。你所做的类似于在一张纸上画一张图片,然后忽略图片,而是在完成后将一张空白纸放入笔记本中。
  • 我用这个Card card1 = new Card(); cards.add(card); 替换了上面的内容,它只显示用户给出的最新排名和花色。再次感谢先生。
  • @Gabby:我认为每次循环时都需要创建一个新的 Card 对象。否则,您的列表将包含对同一个 Card 对象的多个引用。
  • 当我将这些(Card card = new Card();Card card1 = new Card(); cards.add(card);)放在 do-while 中时,它什么也不显示。
【解决方案2】:

您的代码的问题在于,存储信息(name)的card未被使用并被丢弃并作为新卡没有数据)您正在创建并传递给list

card.setCardName (card.getSuitName() + "-" + card.getRankName()); //hold data
Card card1 = new Card();  // holds nothing (useless)
cards.add(card1); // will have card with no data

public void displayAll() {
   JOptionPane.showMessageDialog(null, new JScrollPane(new JList(cards.toArray())));
    // has nothing to display
}

【讨论】:

  • 谢谢!我只是用这个来代替cards.add(card);,它现在可以工作了。 :)
猜你喜欢
  • 2012-07-29
  • 1970-01-01
  • 2015-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-27
  • 2023-04-10
  • 2011-08-31
相关资源
最近更新 更多