我正在尝试创建一个 parking 场程序来模拟何时将汽车添加到 parking 场。
我的想法是创建一个汽车类型列表,将汽车添加到固定容量列表 (15) 中。
一切正常,直到我突然开始收到以下异常:
Exception in thread "main" java.lang.UnsupportedOperationException
我很困惑为什么现在会发生这种情况,因为我没有改变任何东西,而且异常似乎来来去去。
我使用 netbeans,在此之前,我遇到了源包中无法识别主类的问题。
我可以在下面为您列出代码:
parking 场类
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(枚举类)
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(枚举类)
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;
}
}
我在进行研究时了解到,由于内存不足,可能会出现上述包问题,我想知道这是否与我当前的问题有关?
提前致谢
最佳答案
问题出在这里:
List<Car> spaces = Arrays.asList( new Car[15] );
Array#asList
返回的List
实现不支持添加/删除操作。只需使用 ArrayList
初始化您的列表:
List<Car> spaces = new ArrayList<Car>();
如果你使用的是 Java7+
List<Car> spaces = new ArrayList<>();
My idea is to create a list of type car which adds the car to a list of fixed capactiy (15).
在 initialise
方法中添加条件,如果 spaces
列表包含特定大小(在本例中为 15
),则它不会不可能再添加任何元素。
Plain vanilla Java 不提供这样的 List
,您可以在其中定义固定大小的元素。不过,这是由 FixedSizeList
提供的类,可在 Commons Collections Apache Library 获得.
更多信息:
关于java - 将类添加到 Collection 时出现 UnsupportedOperationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27093104/