Java Arraylist habe java.lang.IndexOutOfBoundsException?
Ich bin eine Allgemeine 3D-artist, wechselte von meiner Laufbahn und begann um Programmieren zu lernen.
Ich hab ein problem mit c106a handout #5.
Der code funktioniert, aber ich habe noch einige Fehler hier melden.
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 4, Size: 4
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at UniqueNames.showUnique(UniqueNames.java:23)
at UniqueNames.main(UniqueNames.java:39)
Warum Arraylist
, welche Strecke seine Fähigkeit, auf seine eigene, immer noch eine OutOfBoundsException
?
Hier ist mein vollständiger code:
import acm.io.*;
import acm.program.ConsoleProgram;
import acm.util.*;
import java.io.*;
import java.util.ArrayList;
import java.lang.*;
public class UniqueNames extends ConsoleProgram{
static ArrayList<String> meString = new ArrayList<String>();
static String input ;
public static void storeUnique(String input){
if (!meString.contains(input))
{
meString.add(input);
}
}
public static void showUnique(ArrayList<String> meString){
System.out.println("Unique name list contains:");
for(int i=0 ;i<= meString.size() ;i++){
System.out.println(meString.get(i));
}
}
public static void main(String[] args){
try{
InputStreamReader stream = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(stream);
while (true){
System.out.println("Enter name:");
String input = br.readLine();
if (input.equals("")) break;
storeUnique(input);
}
{showUnique(meString);}
}
catch(IOException e){
}
}
}
InformationsquelleAutor Vittori | 2013-08-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den folgenden Zeilen:
werden sollte:
Dies ist, weil der index, der die Liste beginnt bei null.
Index: 4, Size: 4
erklärt ein wenig mehr. Wenn Sie anrufenget(4)
, tritt eine Ausnahme auf, weil deine Liste hat nur eine Größe von 4.get(4)
versuchen würde, Zugriff auf das 5. element in der Liste.Gültige Elemente, auf die Sie zugreifen können, wäre
get(0)
,get(1)
,get(2)
,get(3)
.InformationsquelleAutor ꜱᴜʀᴇꜱʜ ᴀᴛᴛᴀ
Fragte Sie, "Warum hat Arraylist, welche Strecke Ihre Kapazitäten, indem Sie Ihre eigenen noch, erhalten eine OutOfBoundsException ???"
Die Antwort ist: eine ArrayList nur reicht seine Kapazität, wenn:
.add(Object o)
)..addAll(Collection c)
)..ensureCapacity(int minCapacity)
).Die Mühe, die Sie haben ist, dass Sie versuchen auf ein Objekt zuzugreifen, die in einem index der Liste, der nicht existiert. Während eine ArrayList dynamisch der Größe, wenn Sie ändern den Inhalt, er wird es nicht tun, wenn Sie einfach versuchen, Zugang den Inhalt.
Das ist der Unterschied.
Um zu vermeiden, den Zugriff auf einen index, der nicht existiert:
i < meString.size()
statti <= meString.size()
denn der index beginnt mit 0 statt mit 1.for(String str : meString)
.InformationsquelleAutor James Dunn
Verwenden Sie die obige Antwort, oder Sie können eine foreach-Schleife:
InformationsquelleAutor Ankit
Wenn Sie eine 2D-ArrayList ,machen Sie sicher, dass Sie instanziieren, jede Zeile und jedes element der entsprechenden Zeile mit dem folgenden code:
Dieser erstellt eine ArrayList mit i (=n) Zeilen und jede Zeile enthält eine ArrayList mit j (=n) Anzahl der Elemente.
Wenn Instanziierung ist nicht richtig gemacht, es könnte im Ergebnis eine IndexOutOfBoundsException
InformationsquelleAutor Harish Chandrasekaran