2015-04-25 5 views
-1

код должен прочитать строки текста из текстового файла и обработать его, добавить его в массив обработанных строк и возвращает массивне может быть решен с переменным затмить

Однако я получаю сообщение когда я пытаюсь вернуть массив. Я предполагаю, что я сделал что-то неправильно в теле кода

static public Media[] importMedia(String fileName){ 
     try { 
     FileReader fileReader = new FileReader(fileName); 
     BufferedReader br = new BufferedReader(fileReader); 
     System.out.println("Reading metadata file: "+fileName); 

     int len=new Integer(br.readLine()); //read number of entries in file 

     //read line in text file 
     //process line using createMedia 
     //add media to array of media objects 

     Media media = createMedia(br.readLine()); 
     Media[] newMedia = new Media[len]; 

     for(int i = 0;i<=len;i++){ 
      newMedia[i] = media; 
     } 
     //return newMedia 
     br.close(); 
    } catch (IOException e){ 
     System.out.println("IO error reading "+fileName); 

    } 
    return newMedia; 
} 
+0

Post ваш трассировки стека. Бессмысленно жаловаться на сообщение об ошибке без включения указанного сообщения. – MarsAtomic

ответ

0

Непосредственным вещь, которая выделяется для меня является тот факт, что переменная возврата объявлена ​​внутри тела попробовать. Если перед созданием переменной генерируется исключение IOException (очень вероятно, что, поскольку все IO выше его), newMedia не будет возвращаться.

Переместить объявление newMedia из попытки и инициализировать его в try и catch.

static public Media[] importMedia(String fileName){ 
    Media[] newMedia; 
    try { 
     FileReader fileReader = new FileReader(fileName); 
     BufferedReader br = new BufferedReader(fileReader); 
     System.out.println("Reading metadata file: "+fileName); 

     int len=new Integer(br.readLine()); //read number of entries in file 

     //read line in text file 
     //process line using createMedia 
     //add media to array of media objects 

     Media media = createMedia(br.readLine()); 
     newMedia = new Media[len]; 

     for(int i = 0;i<=len;i++){ 
      newMedia[i] = media; 
     } 
     //return newMedia 
     br.close(); 
    } catch (IOException e){ 
     System.out.println("IO error reading "+fileName); 
     newMedia = null; 
    } 
    return newMedia; 
} 
1

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

Попробуйте это обновления:

static public Media[] importMedia(String fileName){ 
    Media[] newMedia = null;//move it here 
    ... 
    Media media = createMedia(br.readLine()); 
    newMedia = new Media[len];//note this line 
    ... 
    return newMedia; 
} 
+0

Это не работает, поскольку len определяется ниже. – iceflow19

Смежные вопросы