我的程序中有一个方法,它从文本文件中读取一个单词。每次游戏重启时我都需要调用此方法,但它包含我的扫描仪对象。我不确定用这个方法多次调用这个方法是正确的,因为我会一遍又一遍地创建相同的实例?
我试图将scanner对象移动到我的构造函数中,但是因为它使用了FileReader,所以需要将它包含在try / catch块中,所以我需要包含其余读取单词的代码,然后我不要以为这应该放在构造函数中。我可能在这里真的不合适但我对于放置这些新物体的最佳位置感到有些困惑。
正如您在我的readWord()
方法中所看到的,我已经包含了扫描程序对象,以显示它在哪里以及在构造函数中正确演示我的问题。
将scanner / filereader声明为全局变量然后像我一样初始化它们也是不好的做法吗?或者我应该像在readWord()
中那样在方法中声明它们吗?
public class Hangman {
private ArrayList<String> wordArray;
private FileReader fr;
private Scanner wordIn;
public Hangman() {
wordArray = new ArrayList<String>();
fr = new FileReader("words.txt"); // Needs to be in try/catch
wordIn = new Scanner(fr); // Not sure this should go here?
}
public void readWord() {
try {
Scanner wordIn = new Scanner(new FileReader("words.txt")); // This is where scanner originally was, not sure this goes here if calling method multiple times?
while (wordIn.hasNextLine()) {
wordArray.add(wordIn.nextLine().toUpperCase());
}
Collections.shuffle(wordArray);
word = wordArray.get(0);
System.out.println("Word: " + word);
scan.close();
} catch (FileNotFoundException e) {
System.out.println("Error: File not found.");
}
}