Como dice el titulo, mi problema es que al compilar me consigue Excepción en el thread «main» java.lang.IndexOutOfBoundsException: Índice: 1, Tamaño: 1. Aquí es la parte donde viene el problema.

Editar.

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1   
at java.util.ArrayList.rangeCheck(ArrayList.java:653)   
at java.util.ArrayList.get(ArrayList.java:429)  
at pa6.FlightFinder.bestDirectPrice(FlightFinder.java:117)  
at pa6.FlightFinder.main(FlightFinder.java:14)


public static ArrayList<String> bestDirectPrice(ArrayList<String> flightList,String city1, String city2) {
ArrayList<String> list = new ArrayList<String>();
ArrayList<String> Price = new ArrayList<String>();
for (int i=0; i<flightList.size(); i++) {
    list = directFlights(flightList, city1, city2);
    Price.add(getPrice(list.get(i)));

}
return Price;

He estado buscando en línea para una solución, así que estoy bastante seguro de que el problema es que la matriz es demasiado pequeño, pero todavía no estoy seguro de cómo solucionarlo. Estoy tratando de llegar a la parte superior de código de tomar sólo los números de la matriz y los puso en una nueva.

ArrayList<String> test = new ArrayList<String>(); //Array with list of flights
test.add("Orlando#DesMoines#194.88");
test.add("Portland#Orlando#287.74");
test.add("Buffalo#Boston#299.52"); 
test.add("Buffalo#Portland#264.80"); 
test.add("Chicago#Buffalo#223.56");

System.out.println(bestDirectPrice(test,"Buffalo","Orlando"));

Y aquí están los otros métodos estoy llamando.

public static String getPrice(String price) { //Takes flight description, which is a string, as a parameter and returns price of flight
String[] sArray = price.split("#", -1);
String newPrice = "";
for (int i = 0; i<1; i++)       
    newPrice = sArray[2];
return newPrice;
}

public static ArrayList<String> directFlights(ArrayList<String> flightList, String city1, String city2) { //Method to create array list containing every direct flight from city1 to city 2
ArrayList<String> list = new ArrayList<String>();
for (int i=0; i<flightList.size(); i++){
    String city2a = getDestinationCity(flightList.get(i));
    String city1a = getOriginationCity(flightList.get(i));
    if (city1a.equals(city1) && city2a.equals(city2)) {
        list.add(flightList.get(i));
    }
}
return list;
}

Me he quedado estancado en esto por un tiempo, así que cualquier ayuda sería muy apreciada!

Editar.

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1   
at java.util.ArrayList.rangeCheck(ArrayList.java:653)   
at java.util.ArrayList.get(ArrayList.java:429)  
at pa6.FlightFinder.bestDirectPrice(FlightFinder.java:117)  
at pa6.FlightFinder.main(FlightFinder.java:14)
  • Un buen seguimiento de la pila sería de gran ayuda aquí creo.
  • Lo siento, todavía soy bastante nuevo en java. ¿Qué es una traza de la pila?
  • stacktrace se completa la excepción de que usted está consiguiendo
  • Posibles duplicados de Qué hace que un java.lang.ArrayIndexOutOfBoundsException y cómo puedo evitarlo?
  • Sí, y esta salida de error podría conducir a la línea exacta donde está el problema.
InformationsquelleAutor Scheids | 2015-12-10

2 Comentarios

  1. 1

    Su bucle for es con respecto a flightList, no de la lista.
    En cada iteración eres la reasignación de un nuevo valor a la lista, en lugar de añadir un nuevo elemento.

    Intente cambiar

    for (int i=0; i<flightList.size(); i++) {
        list = directFlights(flightList, city1, city2);
        Price.add(getPrice(list.get(i)));
    
    }

    a

    list = directFlights(flightList, city1, city2);
    for (int i=0; i<list.size(); i++) {
        Price.add(getPrice(list.get(i)));
    }
    • Muchas gracias, que fija!
  2. 2

    Por favor, busque en estos dos bloques de

    Bucle hasta que i < flightList.size()

    Pero getPrice(list.get(i) está utilizando el índice de arriba, pero en la lista de diferente

    for (int i=0; i<flightList.size(); i++) {
        list = directFlights(flightList, city1, city2);
        Price.add(getPrice(list.get(i)));
    
    }

    Dentro De Método , directFlights()

    Lista se crea utilizando la siguiente condición, lo que significa size of list will always be less than or equal to size of flightList.

    Pero por encima de getPrice(list.get(i) es el uso de indización de los padres de la lista (flightList).

    if (city1a.equals(city1) && city2a.equals(city2)) {
            list.add(flightList.get(i));
        }
    • Gracias, eso tiene mucho más sentido!
    • esto es algo que ahora puede debug y trace, porque en tiempo de ejecución lo es el de datos, ¿cuál es el tamaño de la lista, no podemos saber

Dejar respuesta

Please enter your comment!
Please enter your name here