2013-04-28 3 views
0

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

Во-первых, метод должен открыть файл с помощью нового 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 не может быть найден, я считаю, потому что это в заявлении попробовать. Есть ли способ переформатировать это для работы?

+0

Вы правы, переместите декларацию за пределами попытки – Kevin

+0

Я пробовал, но проблема заключалась в том, что этот бит кода зависел от кода выше (fileReader fr ...), который также может генерировать исключение. – cmart

ответ

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; 
} 

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