2016-11-22 71 views
2

我的任务是创建一个名为禁忌的游戏。它由一个主要词和3个被禁止的词组成。游戏的目的是要在屏幕上显示单词,然后用户必须描述主要单词而不使用单词本身或禁用的单词。如何将数据从CSV读取到集合中

到目前为止,我已经能够读取已存储在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(); 
     } 
    } 
} 
+0

您应该使用Commons CSV来处理您的CSV需求。它很容易使用,并会让你的生活变得更简单。 – DejaVuSansMono

+0

我猜这是一个低水平的课程问题,这意味着标准/外部图书馆不倾向于被允许。 –

回答

0

您正在执行中产生的Card太创建一个卡,每次,你输出其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()); 

附加Point

按照惯例,java变量以小写字母和类开头es使用大写字母,因此可能会造成混淆

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' 
+1

非常感谢,非常有用,非常快。再次感谢 – xHecticAtomic

+0

Upvote并接受,如果它解决您的问题,请 –