在输出文件中跟踪基于文本的hangman游戏

时间:2015-04-01 04:28:29

标签: java stringtokenizer file-writing

长话短说,gameplayWord是一个单词,是从一个刽子手游戏的单词列表中随机确定的(在这种情况下是简单的单词文件)。 easyContentList是该文件中所有数据的ArrayList。该文件是2列,第一列 - 可以使用的单词,第二列 - 表示该单词使用次数的数字。 (初始文件中为0)我需要根据游戏的每次迭代来跟踪这个数字。 easyFileUpdateList是在类级别声明的String ArrayList。 问题是这基本上不起作用:

public void updateEasyFile(String gameplayWord, ArrayList<String> easyContentList) {

    Integer used = 0; // represents used word count
    String strUsed = ""; 

    for (int i = 0; i < easyContentList.size() - 1; i++) {
        String oneLine;
        oneLine = easyContentList.get(i);
        tokenizer = new StringTokenizer(oneLine);

        String firstToken = tokenizer.nextToken();

        if (firstToken.equals(gameplayWord)) {
            used = Integer.parseInt(tokenizer.nextToken());
            used++;
            strUsed = used.toString();
            easyFileUpdateList.add(gameplayWord + "    " + strUsed + "    " + "TODO");
        }
        if (!firstToken.equals(tokenizer.nextToken())) // add the first token of every line except the first
            easyFileUpdateList.add(oneLine);        
    }

    try {

        PrintWriter printWriter = new PrintWriter(new FileOutputStream(new File("hmeasy.txt")));

        for (String oneLine : easyFileUpdateList) {
            printWriter.println(oneLine);
        }
        printWriter.close();
    }
    catch (FileNotFoundException fnfe) {
        fnfe.printStackTrace();
    }
}

更新

谢谢,我会研究哈希集。让我澄清一点,我还没有完全关注。

正确,文件将如你所说,所以如果文字是狗,猫和雾,文件将如下所示:

dog    0
cat    0
fog    0

有第3列零,这是TODO的用途,但我稍后会担心。

你是正确的我遇到的问题是它只是添加一个带有单词的新条目,然后在第二列中添加1。因此,如果连续3次随机选择雾并执行此方法,则会显示

dog    0
cat    0
fog    1
dog    0
cat    0
fog    1
fog    1
dog    0
cat    0
fog    1
fog    1
fog    1

我正在寻找的是:  第一轮:

dog   0
cat   0 
fog   1

第二轮:

dog   0
cat   0
fog   2

等...

每次随机选择单词时,我都需要更新文件中的数字。

2 个答案:

答案 0 :(得分:0)

我可以判断您的hmeasy.txt文件是否如下所示:

 firstGamePlayWord    0
 secondGamePlayWord    0

如果第一个条目被播放,它将很快显示如下:

 firstGamePlayWord    0
 secondGamePlayWord    0
 firstGamePlayWord    1    TODO

我怀疑,这不是你想要的。它是这样做的,因为你使用这一行:

easyFileUpdateList.add(gameplayWord + "    " + strUsed + "    " + "TODO");

因为这是一个ArrayList add(),所以只需在最后处理该行。

我可以告诉你改为使用set()与你工作的i很难找到,但这会鼓励糟糕的设计。您应该停止使用ArrayList。它不是为查找而设计的。

相反,我鼓励您查看使用LinkedHashSet<String, Integer>。无需令牌化,查找速度很快,一切都与添加的顺序相同。

当试图在java中找到正确的数据结构时,我看看这个: enter image description here

答案 1 :(得分:0)

谢谢,我会研究哈希集。让我澄清一点,我还没有完全关注。

正确,文件将如你所说,所以如果文字是狗,猫和雾,文件将如下所示:

dog    0
cat    0
fog    0

有第3列零,这是TODO的用途,但我稍后会担心。

你是正确的我遇到的问题是它只是添加一个带有单词的新条目,然后在第二列中添加1。因此,如果连续3次随机选择雾并执行此方法,则会显示

dog    0
cat    0
fog    1
dog    0
cat    0
fog    1
fog    1
dog    0
cat    0
fog    1
fog    1
fog    1

我正在寻找的是:  第一轮:

dog   0
cat   0 
fog   1

第二轮:

dog   0
cat   0
fog   2

等...

每次随机选择单词时,我都需要更新文件中的数字。