2016-04-24 8 views
-2

Ich habe Probleme mit diesem Fehler versucht, das Array aus einer Textdatei zu füllen. Ich denke es könnte etwas mit meiner if Schleife zu tun haben, aber ich bin mir nicht sicher. Es gibt mir den Out-of-Bounds-Fehler unter myData[9]. Was ich tun möchte, ist zu überprüfen, ob der erste Buchstabe ein ist (was bedeutet, dass der folgende Kram ein Update ist), und dann ein Update-Objekt zu machen. Meine update.txt Datei hat nur 10 Dinge darin zu bevölkern myData mit, weshalb ich bin verwirrt, warum myData[9] gibt mir einen Fehler außerhalb der Grenzen (speziell wo ich versuche, es gleich lastThirty setzen).Array-Index Out of Bounds Fehler beim Auffüllen aus einer Textdatei

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

Der Inhalt der Datei ist wie folgt:

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

Ihr Array scheint kein Objekt in Index 9 zu haben. Zeigen Sie uns Ihre Datei. – Gendarme

+0

Entweder eine Ihrer Zeilen hat weniger als 10 Einträge oder die Datei hat mehr Zeilen, als Ihr 'updates' Array halten kann (Sie möchten vielleicht eine' List' anstelle eines Arrays fester Größe machen). Es wäre einfacher, wenn Sie angegeben hätten, in welcher Zeile Ihres Codes der Fehler aufgetreten ist. –

+0

Es tritt in Zeile 17 des obigen Ausschnitts auf. Das Aktualisierungsobjekt-Array hat eine Größe von 200, und es gibt nur 5 Updates in der Datei, so dass dies kein Problem sein sollte. Ich habe nur die TXT-Datei überprüft, und jedes Update hat 10 Elemente, der Update-Konstruktor hat 10 Elemente, und ich gebe 10 Dinge hinein. – Thomas

Antwort

1

Es hängt davon ab, wie die txt geschrieben wird, aber wahrscheinlich die String[] myData = str.split("#"); Rückkehr nur ein Array lang 9, so das 10nth Element Zugriff bewirken, dass die Error.

Betrachten Sie zum Beispiel, dass "boo # und # foo" einen String [3] zurückgeben sollten. Ihr txt, um funktional zu sein, sollte einen String [10] zurückgeben.

Versuchen Sie, den TXT zu ändern, um ein weiteres '#' hinzuzufügen und sehen Sie, ob es funktioniert, oder sehen Sie besser den Inhalt des Arrays im Debug.

+0

Ich habe den Hauptpost bearbeitet, um die Textdateidaten aufzunehmen. Die Zeilen mit einem "d" scheinen korrekt formatiert zu sein, und mein Konstruktor für Updates enthält 10 zu übergebende Elemente. – Thomas

+0

Ja, die von Ihnen geposteten Zeilen scheinen korrekt zu sein. Wenn Sie im Debuggen sehen könnten, was passiert, sollte es leicht zu erkennen sein, wo etwas schief läuft. Oder sogar das Einfügen einiger System.out.println der Array-Elemente sollte einige nützliche Einsichten liefern. –

+0

Ich bin nicht vertraut mit dem Debugger in NetBeans, ich habe eine println jedes Mal, wenn ich meineData mit einer Variablen gefüllt, und es scheint, überspringt die MovieTitle, dann eine Out-of-Grenzen auf dem letzten Index zu werfen. – Thomas

Verwandte Themen