Нужна помощь в исправлении ошибки, попробуйте поймать ошибку

Я пытаюсь написать метод, который печатает информацию в массиве. направления: Создайте второй метод для WordPath: makeWordArray, который принимает в качестве входных данных имя файла String и возвращает либо массив, либо ArrayList, в котором хранятся объекты WordData.

Сначала метод должен открыть файл с новым FileReader (файлом), вызвать метод numLines, чтобы получить количество строк в файле, а затем создать массив или ArrayList такого размера.

Затем закройте FileReader и снова откройте файл. На этот раз используйте BufferedReader br = new BufferedReader (новый FileReader (файл)). Создайте цикл для запуска файла с вызовом br.readLine (). Для каждой строки, которую вы читаете из br.readLine (), вызовите parseWordData в этой строке, чтобы получить WordData и сохранить объект WordData в соответствующем индексе массива или ArrayList.

Мой код:

public class WordPath {

public static int numLines(Reader reader) {
BufferedReader br = new BufferedReader(reader);
int lines = 0;
try {
  while(br.readLine() != null) {
    lines = lines + 1;
  }

  br.close();
}
catch (IOException ex) {
  System.out.println("You have reached an IOException");
}
return lines;

}

 public WordData[] makeWordArray(String file) {
 try {
  FileReader fr = new FileReader(file);
  int nl = numLines(fr);
  WordData[] newArray = new WordData[nl];
  fr.close();
  BufferedReader br = new BufferedReader(new FileReader(file));
  while(br.readLine() != null) {
    int arrayNum = 0;
    newArray[arrayNum] = WordData.parseWordData(br.readLine());
    arrayNum = arrayNum + 1;
  }
}
catch (IOException ex) {
  System.out.println("You have reached an IOException");
}
catch (FileNotFoundException ex2) {
  System.out.println("You have reached a FileNotFoundexception");
}
return newArray;
}  
}

У меня проблема, когда переменная newArray не может быть найдена, я считаю, потому что она находится в инструкции try. Есть ли способ переформатировать это, чтобы оно работало?


person cmart    schedule 28.04.2013    source источник
comment
Вы правы, вынесите декларацию за пределы попытки   -  person Kevin    schedule 28.04.2013
comment
Я пробовал, но проблема заключалась в том, что этот фрагмент кода зависел от приведенного выше кода (fileReader fr ...), который также мог вызвать исключение.   -  person cmart    schedule 28.04.2013


Ответы (1)


Нравится:

public WordData[] makeWordArray(String file) {
    WordData[] newArray = null;
    try {
        FileReader fr = new FileReader(file);
        int nl = numLines(fr);
        newArray = new WordData[nl];
        fr.close();
        BufferedReader br = new BufferedReader(new FileReader(file));
        while(br.readLine() != null) {
            int arrayNum = 0;
            newArray[arrayNum] = WordData.parseWordData(br.readLine());
            arrayNum = arrayNum + 1;
        }
    }
    catch (IOException ex) {
        System.out.println("You have reached an IOException");
    }
    catch (FileNotFoundException ex2) {
        System.out.println("You have reached a FileNotFoundexception");
    }
    return newArray;
} 

Вам нужно вытащить объявление переменной снаружи, но оставить присвоение этой переменной внутри попытки.

person Kevin    schedule 28.04.2013