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, я не думаю, что что-то не так. Кто-нибудь знает, как это решить? благодаря
попробуйте под кодом заменить код после
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
}
Прежде всего: если у вас есть 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
}