Исключение в потоке «основной» java.lang.IndexOutOfBoundsException: индекс: 10, размер: 10

1
Scanner input = new Scanner(System.in);

    ArrayList availableList = new ArrayList();

    for(int i=0;i<vehicleList.size();i++)
    {
      Vehicle v = (Vehicle) vehicleList.get(i);
      if(v.isAvailable())
         availableList.add(v);
    }

    System.out.println("Option 5.Rent A Vehicle");
    listCustomers(customerList);//displays Customers

    System.out.print("Enter S/No of customer:");
    int c1 = input.nextInt();//user input for S/No of customer

    while(c1 > customerList.size() || c1 < 1)//checks if S/No is valid
    {
    System.out.println("Invalid option! please re-enter S/No of customer");
    c1 = input.nextInt();//prompt user to re-enter S/No of customer
    }

    Customer c = (Customer) customerList.get(c1-1); //creates customer object
    listavailableVehicles(availableList);//displays vehicles

    System.out.print("Enter S/No of Vehicle        :");
    int ve= input.nextInt();//user input for S/No of vehicle
    Vehicle v = (Vehicle) availableList.get(ve-1);//creates vehicle object

    while(ve > availableList.size() || (!v.isAvailable()))//check if S/No is valid
    {
    System.out.println("Invalid option! please re-enter S/No of of vehicle");
    ve = input.nextInt();//prompt user to re-enter S/No of vehicle
    v = (Vehicle) vehicleList.get(ve-1);//creates vehicle object
    }

У меня здесь ошибка. while (ve> availableList.size() || (! v.isAvailable())) Я имею в виду, что он может компилироваться, но для проверки это дает мне ошибку. Доступный список содержит 10 автомобилей. Когда я ввожу 0 или 11 автомобилей, это дает мне ошибку: Исключение в потоке "main" java.lang.IndexOutOfBoundsException: Index: 10, Size: 10. Согласно моему заявлению while, я не думаю, что что-то не так. Кто-нибудь знает, как это решить? благодаря

  • 0
    Можете быть более конкретными ? какая линия это? в любом случае, если выдается исключение, значит, что-то не так. Возможно, вы идете до 'i == size' или чего-то подобного и забыли, что в Java индексы начинаются с 0.
  • 1
    Java-массивы основаны на 0, поэтому 10 элементов означают, что вы можете получить доступ к последнему элементу в массиве [9].
Показать ещё 8 комментариев
Теги:

2 ответа

1
Лучший ответ

попробуйте под кодом заменить код после

int ve= input.nextInt();//user input for S/No of vehicle эта строка с нижеследующим кодом

 Vehicle v=null;
 if(ve > availableList.size() || ve <= 0){
     while(ve > availableList.size() || (!v.isAvailable()))//check if S/No is valid
     {
        System.out.println("Invalid option! please re-enter S/No of of vehicle");
        ve = input.nextInt();//prompt user to re-enter S/No of vehicle

        if(ve <= availableList.size() && ve > 0) {
          v = (Vehicle) vehicleList.get(ve-1);//creates vehicle object
          break;
         }

     }
 }
 else
 {
       v = (Vehicle) availableList.get(ve-1);//creates vehicle object
 }
  • 0
    Это работает для чисел выше 10! Как сделать так, чтобы на входах 0 и ниже отображалось одно и то же сообщение об ошибке?
  • 0
    если вы вводите 0 в качестве входных данных, вы должны написать vehicleList.get (ve), а не vehicleList.get (ve-1), и обновить && ve> 0 с помощью && ve> = 0
Показать ещё 5 комментариев
1

Прежде всего: если у вас есть ArrayList длиной 10, то действительные индексы составляют от 0 до 9.

Поэтому вы должны заранее проверить размер своего ArrayList следующим образом:

if(i >= 0 && i < vehicleList.size()){
   vehicleList.get(i);
   ...
} else {
   ...
}

или используйте try-catch следующим образом:

try {
    vehicleList.get(i);
} catch (Exception e) {
    // you can log exception here
}
  • 0
    что я должен заполнить для .... разделов?
  • 0
    ... - просто другие действия, которые вам нужны

Ещё вопросы

Сообщество Overcoder
Наверх
Меню