我的问题是我无法将带有单词列表的.txt中的值分配给数组。我认为问题在于我要求的东西尚未可用,比如在不知情的情况下向未来询问。这是我的代码,任何帮助将与任何提示一起受到赞赏。
File words = new File("wordList.txt"); //document with words
String wordToArray = new String();
String[] arrWord = new String[3863]; // number of lines
Scanner sc = new Scanner(words);
Random rWord = new Random();
int i = 0;
do
{
wordToArray = sc.next(); //next word
arrWord[i] = wordToArray; //set word to position
i++; //move to next cell of the array
sc.nextLine(); //Error occurs here
}while(sc.hasNext());
答案 0 :(得分:0)
while(sc.hasNext()) {
sc.nextLine(); //This line should be first.
wordToArray = sc.next(); //next word
arrWord[i] = wordToArray; //set word to position
i++; //move to next cell of the array
}
您的操作顺序错误。 sc.hasNext()应该在获得下一行之前发生。
我以为你可能会得到一个ArrayOutOfBoundsException。如果使用不会发生的ArrayList。这就是你可以使用数组列表的方法。
String wordToArray = new String();
List<String> arrWord = new ArrayList<String>();
Scanner sc = new Scanner(words);
Random rWord = new Random();
while(sc.hasNext()) {
sc.nextLine(); //This line should be first.
wordToArray = sc.next(); //next word
arrWord.add(wordToArray); //set word to position
}
int i = arrWord.size();
答案 1 :(得分:0)
在您拥有条件sc.nextLine()
之前,您需要sc.hasNext()
。
首先,您应该为do...while
循环切换while
循环:
while(sc.hasNext()) {
wordToArray = sc.next(); // Reads the first word on the line.
...
sc.nextLine(); // Reads up to the next line.
}
确保在尝试读取之前可以读取更多数据。然后,您还应将sc.hasNext()
更改为sc.hasNextLine()
,以确保文件中还有另一行,而不仅仅是另一个令牌:
while(sc.hasNextLine()) {
...
}
问题是,当你循环遍历.txt
文件的最后一行时,你要求下一行(.nextLine()
),然后才知道文件是否有另一行给你(.hasNextLine()
{1}})。
一般来说,最好使用while
循环而不是do...while
循环来避免这样的事情。事实上,实际上几乎不需要do...while
循环。