2015-04-30 177 views
0

我已經從文本文件加載多次之前沒有硫問題,我已閱讀並重新讀我的代碼,我(個人)不能明白爲什麼我會得到這個問題,我完全失去了。ArrayIndexOutOfBounds通過文本文件循環

static public ArrayList<Media> importMedia(String fileName) throws IOException 
    { 
     try { 
      ArrayList<Media> mList = new ArrayList<>(); 
      BufferedReader reader = new BufferedReader(new FileReader(fileName)); 
      String line = reader.readLine(); 
      int numberOfItems = Integer.valueOf(line); 
      while((line = reader.readLine()) != null) 
      { 
       String[] split = line.split(","); 
       if(split[0].contains("mp3")) 
       { 
        Mp3 mp3 = new Mp3(split[1]/*title*/,split[0]/*filename*/,Integer.parseInt(split[4])/*releaseyear*/,split[2]/*artist*/,split[3]/*album*/,split[5]/*label*/,Double.parseDouble(split[6])/*runtime*/); 
        mList.add(mp3); 
       }else if (split[0].contains("gif")) 
       { 
        Gif gif = new Gif(split[1]/*title*/,split[0]/*filename*/,Integer.parseInt(split[6])/*releaseyear*/,Double.parseDouble(split[2])/*width*/,Double.parseDouble(split[3])/*height*/,split[4]/*equipName*/,split[5]/*equipModel*/); 
        mList.add(gif); 
       }else if(split[0].contains("avi")) 
       { 
        String castNames = ""; 
        boolean first = true; 
        for(int i = 7; i < 15; i++) 
        { 
         if(!(split[i].isEmpty())) 
         { 
          if(first) 
          { 
           castNames += split[i]; 
           first = false; 
          }else{ 
           castNames += "," + split[i]; 
          } 
         } 
        } 
        Avi avi = new Avi(split[1]/*title*/,split[0]/*filename*/,Integer.parseInt(split[3])/*releaseyear*/,split[2]/*studio*/,split[5]/*director*/,castNames/*castnames*/,Double.parseDouble(split[4])/*runtime*/,Integer.parseInt(split[6])/*cast*/); 
        mList.add(avi); 
       }else{ 
       } 
      } 
      return mList; 
     } catch (Exception ex) { System.out.println(ex.toString()); } 
     return null; 
    } 

現在只獲得第3檔(控制檯圖所示) enter image description here

我只是通過努力循環,我不知道爲什麼它會是出界了,我不能看到循環中的任何錯誤,或者爲什麼它給我一些但不是全部。

+2

逃脫請修改代碼以打印整個堆棧跟蹤時,一個異常被捕獲。這將告訴你哪一行導致異常,你可以從那裏追蹤問題。如果不是,請更新問題以提供更多詳細信息。 –

+1

你可以分享stacktrace哪裏確切它的投擲ArrayIndexOutOfBound異常 – Ranjeet

+0

我添加了支票,我相信我發現了這個問題,謝謝你的幫助隊友 – Cacoon

回答

0

在這段代碼中使用的是一個字符串數組split從指數0到14的索引

這將是很好的檢查字符串數組的長度做一些防禦性編程。

請在繼續在程序中使用之前檢查數組的長度。

split.length >14

通過使用這樣的習慣,你可以隨時從「ArrayIndexOutOfBoundsException