2016-04-24 67 views
-2

我嘗試從文本文件填充數組時遇到此錯誤。我認爲這可能與我的if循環有關,但我確實不確定。它在myData[9]上給我出界限錯誤。我想要做的是檢查第一個字母是否爲D(表示以下內容是更新),然後創建更新對象。我的update.txt文件只有10件東西填充myData,這就是爲什麼myData[9]給我出界限錯誤(特別是我試圖設置它等於lastThirty)的原因。從文本文件填充時數組索引超出邊界錯誤

scan = new Scanner(file); 
while (scan.hasNext()) 
{ 
    String str = scan.nextLine(); 
    String[] myData = str.split("#"); 
    if (myData[0].equalsIgnoreCase("D")) 
    { 
     recordType = myData[0]; 
     actionCode = myData[1]; 
     boxID = Integer.parseInt(myData[2]); 
     movieID = Integer.parseInt(myData[3]); 
     movieTitle = myData[4]; 
     movieGenre = myData[5]; 
     releaseYear = myData[6]; 
     inStock = myData[7]; 
     totalRentals = Integer.parseInt(myData[8]); 
     lastThirty = Integer.parseInt(myData[9]); 
     updates[count] = new UpdateRecord(recordType, actionCode, boxID, movieID, movieTitle, movieGenre, releaseYear, inStock, totalRentals, lastThirty); 
     count++; 
    } 

該文件的內容如下:

H#Title Town Video Mart Updates#04\24\2016 
D#A#4#5#Harry Potter#Action#2001#True#50#5 
D#A#4#5#Shutter Island#Suspense#2001#True#50#5 
D#A#4#5#The Blind Side#Drama#2001#True#50#5 
D#A#4#5#Borat#Comedy#2001#True#50#5 
D#A#4#5#Bad GrandPa#Comedy#2001#True#50#5 
T#Title Town Video Mart Updates#04\24\2016#5 
+1

您的數組似乎在索引9中沒有對象。向我們顯示您的文件。 – Gendarme

+0

你的任一行只有少於10個項目,或者這個文件的行數超過了你的'updates'數組可以容納的行數(你可能想把它做成一個'List'而不是一個固定大小的數組)。如果您在代碼中指出錯誤發生在哪一行,則會更容易。 –

+0

它發生在上面摘錄的第17行上。更新對象數組的大小爲200,並且文件中只有5個更新,所以這應該不成問題。我只是加倍檢查了txt文件,每次更新都有10個項目,更新構造函數有10個項目,我將10件事情傳遞給它。 – Thomas

回答

1

這取決於TXT是怎麼寫的,但可能是String[] myData = str.split("#");只返回一個數組長9,所以訪問10nth元素引起錯誤。

例如,「boo#和#foo」應該返回一個String [3]。你的txt功能應該返回一個String [10]。

嘗試修改txt以添加另一個'#'並查看它是否有效,或者更好地在調試中查看數組的內容。

+0

我編輯了主帖子以包含文本文件數據。帶有「d」的行似乎格式正確,並且我的更新構造函數包含要傳入的10個項目 – Thomas

+0

是的,您發佈的行看起來是正確的。如果你能在調試中看到發生了什麼,應該很容易發現事情出錯的地方。或者甚至插入一些數組元素的System.out.println應該提供一些有用的見解。 –

+0

我不熟悉如何在netBeans中使用調試器,我每次使用變量填充myData時都會執行println,並且它似乎跳過了movieTitle,然後在最後一個索引上拋出了一個界限。 – Thomas