【问题标题】:How do I store data read in from a CSV into a collection如何将从 CSV 读取的数据存储到集合中
【发布时间】:2017-04-06 16:08:51
【问题描述】:

我的任务是创建一个名为 Taboo 的游戏。它由一个主要词和3个禁止词组成。游戏的目的是让单词显示在屏幕上,然后用户必须在不使用单词本身或禁用单词的情况下描述主要单词。

到目前为止,我已经能够读取存储在 CSV 中的数据并拥有它,这样当我选择输出 BannedWords 时,它就会这样做。现在的问题是,当它输出 MainWord 或 BannedWord1 等时......它会输出 CSV 中每条记录的数据。

以下是我 CSV 中的数据(这只是一个记录很少的测试,所以当它工作时我可以介绍其余的)。

树、棕色、绿色、自然

湖,蓝色,水,湿

苹果、绿色、水果、健康


如果我选择输出第一个单词 MainWord,它会输出如下:

苹果


我需要以某种方式将从 CSV 读取的数据单独存储在一个集合中,以便当我需要使用它们时,它们可以正确输出并且它们以我可以显示的方式显示稍后在 GUI JLabel 中。

注意我使用的是 NetBeans 可能也很有用,因此我也可以使用任何内置函数。

public class Card 
{
    private String sMainWord;
    private String sBannedWord1;
    private String sBannedWord2;
    private String sBannedWord3;

    public Card(String sMW, String sBW1, String sBW2,String sBW3)
    {
        sMainWord = sMW;
        sBannedWord1 = sBW1;
        sBannedWord2 = sBW2;
        sBannedWord3 = sBW3;
    }

    public void setsMainWord(String sMW)
    {
        sMainWord = sMW;
    }

    public String getsMainWord()
    {
        return sMainWord;
    }

    public void setsBannedWord1(String sBW1)
    {
        sBannedWord1 = sBW1;
    }

    public String getsBannedWord1()
    {
        return sBannedWord1;
    }

    public void setsBannedWord2(String sBW2)
    {
       sBannedWord2 = sBW2; 
    }

    public String getsBannedWord2()
    {
        return sBannedWord2;
    }

    public void setsBannedWord3(String sBW3)
    {
        sBannedWord3 = sBW3;
    }

    public String getsBannedWord3()
    {
        return sBannedWord3;
    }

    public static void main(String[] args) throws FileNotFoundException 
    {
        String fileNameDefined = "/Users/student/NetBeansProjects/TabooGameComplete/CSData.csv";
        File file = new File(fileNameDefined);

         try
        {
            Scanner inputStream = new Scanner(file);


            while(inputStream.hasNext() != false)
            {

                String TabooCardWords = inputStream.nextLine();
                String[] information = TabooCardWords.split(",");

                String MainWord = information[0];
                String BannedWord1 = information[1];
                String BannedWord2 = information[2];
                String BannedWord3 = information[3];

                Card TBC = new Card (MainWord, BannedWord1, BannedWord2, BannedWord3);


                System.out.println("*" + BannedWord1 + "*");
            }


        }
        catch (IOException e) 
        {
            e.printStackTrace();
        } 
    }
}

【问题讨论】:

  • 您应该使用 Commons CSV 来处理您的 CSV 需求。它易于使用,让您的生活更简单。
  • 我猜这是一个低级课程问题,这意味着通常不允许使用标准/外部库。

标签: java arrays list netbeans collections


【解决方案1】:

您正在生成Cards 的循环中执行输出语句,因此每次创建卡片时,您都会输出其BannedWord1。当您一个接一个地创建它们时,它们将一个接一个地输出。

//For each line in file
while(inputStream.hasNext() != false)
{
  //Create Card
  //Output BannedWord1 used to create Card
}

如果您想输出一个Card 的一个元素,则需要保留您创建的Card 对象以在循环外使用:-

Card[] cards = new Cards[3];
int i=0;
//For each line in file
while(inputStream.hasNext() != false)
{
  //Create Card
  cards[i++] = newlyCreatedCardObject;  //Store card object for later
  //Output BannedWord1 used to create Card
}

//Output BannedWord1 from the Card created from the second line
System.out.println(cards[1].getsBannedWord1());

加分项

按照惯例,java 变量以小写字母开头,类以大写字母开头,所以这可能会造成混淆

String TabooCardWords;  //Should really be 'tabooCardWords'
...
String MainWord = information[0];    //-> 'mainWord'
String BannedWord1 = information[1]; //-> 'bannedWord1'
String BannedWord2 = information[2]; //-> 'bannedWord2'
String BannedWord3 = information[3]; //-> 'bannedWord3'

【讨论】:

  • 非常感谢,非常有用而且非常快速。再次感谢
猜你喜欢
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2015-07-19
  • 1970-01-01
  • 2018-09-01
  • 2013-10-06
  • 1970-01-01
相关资源
最近更新 更多