0

我的问题是我无法将带有单词列表的 .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());
4

2 回答 2

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();
于 2015-02-24T20:15:01.560 回答
0

sc.nextLine()在有条件之前要求sc.hasNext()

首先,您应该将循环切换do...whilewhile循环:

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()

一般来说,最好使用while循环而不是do...while循环来避免这样的事情。事实上,几乎从来没有do...while真正需要循环的情况。

于 2015-02-24T20:17:26.240 回答