java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
Ich immer
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at hartman.ShortestString.printShortestString(ShortestString.java:40)
at hartman.ShortestString.main(ShortestString.java:28)
Wie kann ich dieses Problem beheben?
package hartman;
import java.util.ArrayList;
import java.util.Scanner;
public class ShortestString {
public static void main(String[] args) {
System.out.printf("WELCOME TO SHORTEST STRING\n\n");
System.out.printf("Type \".\" when done entering data.\n\n");
ArrayList<String> myArray = new ArrayList<>();
Scanner keyboard = new Scanner(System.in);
boolean keepAsking = true;
while (keepAsking) {
System.out.printf("Enter string: ");
String userInput = keyboard.nextLine();
if (userInput.equals(".")) {
keepAsking = false;
} else {
myArray.add(userInput);
}
}
printShortestString(myArray);
System.out.printf("\n\nGOODBYE!\n");
keyboard.close();
}
public static void printShortestString(ArrayList<String> myArray) {
int index;
int index1 = 1;
for (index = 0; index < myArray.get(index).length(); index++) {
if (myArray.get(index).length() < myArray.get(index1).length()) {
System.out.printf("\nShortest string is \"%s\" with length %d",
myArray.get(index), myArray.get(index).length());
} else {
index1++;
}
}
return;
}
}
Die Titel der post widerspiegeln sollte, das Problem
Kannst du uns die Zeile 40 ist?
Sollte
40 ist for (index = 0; index < myArray.get(index).length(); index++) {
Sie sind also die Schleife durch alle Saiten, bis Sie ein, die Länge ist nicht größer als der index, dass es gefunden wird? Das ist definitiv nicht klingen wie die richtige Logik.
Kannst du uns die Zeile 40 ist?
Sollte
for (index = 0; index < myArray.get(index).length(); index++) {
werden for (index = 0; index < myArray.get(index1).length(); index++) {
? Du bist der Inkrementierung durch ein array und mit dem counter beim Vergleich und es verursacht Probleme.40 ist for (index = 0; index < myArray.get(index).length(); index++) {
Sie sind also die Schleife durch alle Saiten, bis Sie ein, die Länge ist nicht größer als der index, dass es gefunden wird? Das ist definitiv nicht klingen wie die richtige Logik.
InformationsquelleAutor Xyphoris | 2014-04-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie es mit
for (index = 0; index < myArray.length(); index++) {
für Zeile 40. Sie sind mit der Länge der Zeichenfolge im elementindex
, nicht die Länge der ArrayList.InformationsquelleAutor Adam
Ihre Methode zu haben scheint problem.
InformationsquelleAutor RoverMAX
Diese Zeile verursacht, Sie gehen aus der index:
Sie möchten, Durchlaufen Sie die Größe des Arrays :
InformationsquelleAutor Pankaj Gadge
InformationsquelleAutor Pat B
Müssen wir sehen, die Quelle der
printShortestString()
, aber ich Wette, Sie brauchen, um Ihre for-Schleife zu unterbrechen, wenn der indexi
, ist eins weniger als die Länge des Arrays, im Gegensatz zu gleich der Länge des Arrays:InformationsquelleAutor NigelO
Ihrer Logik hinter
printShortestString(...)
ist falsch. Sie wollen die Schleife durch die Liste Größe (nicht die Größe der Zeichenfolge). Was happeneing hier:Was Sie wollen, ist:
Ändern:
:
Das ist in Ordnung. Zugang nur die Länge innerhalb der Schleife. Nicht in der Schleife-header.
InformationsquelleAutor But I'm Not A Wrapper Class