2015-02-10 36 views
-1

这是我迄今为止对于我的hang子手程序,其目的是将一个文本文件存储在一个数组中,并使用随机类来选择该字的下标。现在我卡在哪里可以走了Hang子手程序,只使用递归

任何想法?

public static void main(String []args) throws IOException 
{ 
    ArrayList<String> list = new ArrayList<>(); 
    BufferedReader reader = new BufferedReader(new FileReader("words.txt")); 

    System.out.println(list); 
    list = listReader(list, reader); 
} 

public static void listReader(ArrayList<String> list,BufferedReader reader)throws IOException 
{ 
    String line = reader.readLine(); 

    if(line == null) 
    { 

     return; 
    } 
    else 
    { 
     list.add(line); 
     listReader(list, reader); 
    } 
     reader.close(); 
} 

我的输出应该是这样的

Try to guess my word, it has 7 letters. 
-------------------- 
Guesses left: 12 
Available letters: abcdefghijklmnopqrstuvwxyz 
Please enter a letter: e 
Letter found, word is: - - - - - - e 

如果有人可以帮助我一些设置或修复递归方法(listreader)以上我会非常感激。

+0

你到目前为止试过了什么?如果没有,尝试一下,然后回到一个[MCVE](http://stackoverflow.com/help/mcve)和一个特定的问题,假设你无法实现它的工作。 – 2015-02-10 15:43:37

+0

你需要更多的细节。解释具体哪些方法不适用于您的方法。即使它有效,我们甚至应该知道它意味着什么?你从来没有告诉我们这种方法的期望是什么。 – tnw 2015-02-10 15:43:37

+1

两个问题:1)你想要做什么?递归,当然,**目标**是什么? 2)你为什么要在递归方法中重新使用'BufferedReader'?这只会让你重新开始阅读文件 – posdef 2015-02-10 15:44:04

回答

0

更改方法listReader到:

你没有与每一个递归调用重新创建读者对象,所以从listReader方法去除reader = new BufferedReader(new FileReader("words.txt"));线。

对于您的其他问题:

  • 显示一个随机选择的单词。

    使用Random类的nextInt方法为random.nextInt(list.size())它会给你(0 - listsize-1)之间的随机数,然后你可以使用该索引得到你的列表的值。

  • 接受来自用户的输入检查,看看这封信是词的内部

    尝试使用Scanner类,从用户读取数据,并在字符串中使用contains方法检查中存在的数据串。

+0

我已经取出了bufferedReader声明,但现在它给了我错误 “void不能转换为ArrayList ,list = listReader(list,reader);”。 我正在使用arraylist来存储文件中的单词,有没有一种更简单的方法来存储文本文件内的数组/列表 – Recontroop 2015-02-10 16:03:39

+0

而不是'list = listReader(list,reader);'只需使用'listReader(list ,阅读器);“。”你正在传递list和list元素将被你的方法填充,然后在主后面你可以遍历或做任何你喜欢的元素在递归方法中添加的元素。 – SMA 2015-02-10 16:08:18