2014-11-23 3 views
1

Im пытается создать программу carpark, которая имитирует, когда автомобили добавляются на автостоянку.UnsupportedOperationException при добавлении класса в коллекцию

Моя идея - создать список автомобилей типа, который добавляет автомобиль в список фиксированных capactiy (15).

Все работало отлично, пока я вдруг не начал получать следующее исключение:

Исключение в потоке «основной» java.lang.UnsupportedOperationException

Im совершенно запутался, почему это происходит сейчас потому что я ничего не менял, и исключение, похоже, приходит и уходит.

Я использую netbeans, и перед этим у меня возникли проблемы с тем, что основной класс не распознается в исходном пакете.

Я могу перечислить для вас код ниже:

паркингов Class

import java.util.Arrays; 
import java.util.List; 
import java.util.Scanner; 

public class CarPark 
{ 
    List<Car> spaces = Arrays.asList(new Car[15]); //Set max size of list to be 15 
    Scanner scanner = new Scanner(System.in); 

    public void initialise() 
    { 
     CarSize carSize = null; 
     CarValue carValue = null; 

     System.out.println("Please enter the registration Number"); 
     String regNo = scanner.nextLine(); 

     System.out.println("\nNow the size of the car"); 
     System.out.println("0 - Small"); 
     System.out.println("1 - Medium"); 
     System.out.println("2 - Large"); 
     int size = scanner.nextInt(); 
     switch(size) 
     { 
      case 0: carSize = CarSize.Small; break; 
      case 1: carSize = CarSize.Medium; break; 
      case 2: carSize = CarSize.Large; break; 
     } 

     System.out.println("\nFinally the value of the car"); 
     System.out.println("0 - Loq"); 
     System.out.println("1 - Medium"); 
     System.out.println("2 - High"); 
     int value = scanner.nextInt(); 
     switch(value) 
     { 
      case 0: carValue = CarValue.Low; break; 
      case 1: carValue = CarValue.Medium; break; 
      case 2: carValue = CarValue.High; break; 
     } 

     addCar(regNo, carSize, carValue); 
     showTotalCars(); 
    } 

    //Adds the car to the list 
    public void addCar(String regNum, CarSize size, CarValue value ) 
    { 
     Car car = new Car(regNum, size, value); 
     spaces.add(car); 
    } 

    public void showTotalCars() 
    { 
     System.out.println("Total Cars = " + spaces.size()); 
    } 
} 

автомобилей класса

public class Car 
{ 
    String RegistrationNumber = ""; 
    CarSize size = null; 
    CarValue value = null; 

    public Car(String regNo, CarSize sizeOfCar, CarValue valOfCar) 
    { 
     RegistrationNumber = regNo; 
     size = sizeOfCar; 
     value = valOfCar; 
    } 

    @Override 
    public String toString() 
    { 
     return "Registration Number = " + RegistrationNumber 
       + "\nSize = " + size.name() 
       + "\nValue = " + value.name(); 
    } 
} 

CarSize (Enum класс)

public enum CarSize 
{ 
    Small(0, "For small cars"), 
    Medium(1, "For medium cars"), 
    Large(2, "For large cars"); 

    private final int Id; 
    private final String description; 

    CarSize(int identifier, String descr) 
    { 
     this.Id = identifier; 
     this.description = descr; 
    } 

    public int getId() 
    { 
     return Id; 
    } 

    public String getDescription() 
    { 
     return description; 
    } 
} 

CarValue (Enum класс)

public enum CarValue 
{ 
    Low(0, "For low value cars"), 
    Medium(1, "For medium value cars"), 
    High(2, "For high value cars"); 

    private final int Id; 
    private final String description; 

    CarValue(int identifier, String descr) 
    { 
     this.Id = identifier; 
     this.description = descr; 
    } 

    public int getId() 
    { 
     return Id; 
    } 

    public String getDescription() 
    { 
     return description; 
    } 
} 

Я прочитал при проведении исследований, что вопрос пакета, как упоминалось выше, может произойти из-за нехватки памяти, и мне интересно, если это связано с моей текущей проблемой?

Заранее спасибо

ответ

4

Проблема здесь:

List<Car> spaces = Arrays.asList(new Car[15]); 

List реализация возвращаемый Array#asList не поддерживает добавление/удаление операций. Просто инициализировать список с ArrayList:

List<Car> spaces = new ArrayList<Car>(); 

из, если вы используете Java7 +

List<Car> spaces = new ArrayList<>(); 

Моя идея заключается в том, чтобы создать список типа автомобиля, который добавляет автомобиль в список фиксированного capactiy (15).

Добавить условие в initialise способе, в котором, если spaces список содержит определенный размер (в данном случае, 15), то это не будет возможно добавить больше элементов.

Обычный ваниль Java не предлагает такого List, где вы можете определить фиксированный размер элементов. Тем не менее, это обеспечивается классом FixedSizeList, который доступен по адресу Commons Collections Apache Library.

Подробнее:

+0

Есть ли способ ограничить мощность Список_массивов до 15 в этом случае? Требования должны включать только 15 автомобилей, которые будут добавлены в список. Спасибо –

+0

@KyleT нет, нет способа. Вы должны сделать это вручную в методе, в котором вы добавите элементы в свой «Список». –

+0

Очень хороший ответ, и вы просветили меня больше на эту тему! Спасибо. –

Смежные вопросы