2015-04-25 56 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

安置自己的堆栈跟踪。在没有包含所述消息的情况下抱怨错误消息是毫无意义的。 – MarsAtomic

回答

0

脱颖而出我眼前的事情的身体是你的回报变量一试的身体内声明的事实。如果在变量被创建之前抛出IOException(很可能因为所有的IO都在它之上),那么将不会有newMedia返回。

将newMedia的声明移出try,并在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

这里的问题是你试图返回的数组在try-catch块内,并且它不能在返回关键字之外访问。

试试这个更新:

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

相关问题