При разборе файла в массив инициализируется только последний элемент

Я пытаюсь получить массив слов из файла (который я написал сам). Первая строка файла говорит мне, как долго должен быть массив, но по какой-то причине инициализируется только последний элемент. Я новичок, поэтому я уверен, что это простое решение, но я просто не могу понять это...

public class WordReader {

     String[] words;

     public WordReader() {
         String line;
         String[] tokens = new String[2];
         int counter = 0;
         try{
             File infile = new File("resources/FunnyWords.txt");

             Scanner reader = new Scanner(infile);
             while(reader.hasNextLine()){
                 line = reader.nextLine();
                 if (line.contains("Number of words")){
                    tokens = line.split(",");
                    continue;
                 }
                 int length = Integer.parseInt(tokens[1]);
                 words = new String[length];
                 words[counter] = line;
                 counter++;
             }

        }catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

Я был бы очень признателен, если бы вы могли помочь.. Спасибо!

2 ответа

Две нижеследующие строки, которые инициализируют массив, должны выполняться только один раз, а не для каждой строки / слова в файле.

int length = Integer.parseInt(tokens[1]);
words = new String[length];

Измените это как

while(reader.hasNextLine()){
    line = reader.nextLine();
     if (line.contains("Number of words")){
        tokens = line.split(",");
        int length = Integer.parseInt(tokens[1]);
        words = new String[length]; //Initialize the words array
        continue;
     }
      words[counter] = line;
      counter++;
     //Or a one liner -  words[counter++] = line;
}

В вашем while петля у вас есть

words = new String[length];

который создает новый String массив в каждой итерации цикла.

Таким образом, вы фактически присваиваете каждой строке свой собственный массив и сохраняете только последнюю.

Другие вопросы по тегам