Java为递增数组赋值

时间:2015-02-24 20:08:00

标签: arrays java.util.scanner do-loops

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

2 个答案:

答案 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循环。