Java 如果我有许多具有顺序的堆栈,如何最好地遍历它们以获得正确的位置?
我正在爪哇为一个停车场建模 在我的停车场课程中,我有三个代表不同大小的自由点的堆栈Java 如果我有许多具有顺序的堆栈,如何最好地遍历它们以获得正确的位置?,java,oop,stack,Java,Oop,Stack,我正在爪哇为一个停车场建模 在我的停车场课程中,我有三个代表不同大小的自由点的堆栈 public class CarPark { Stack<Spot> smallSpots; Stack<Spot> mediumSpots; Stack<Spot> largeSpots; 现在,我有了一个与我的停车场类的方法,它采取了一辆车,并检查了一个地点的权利堆栈,如果一个地点是可用的,采取它 车辆可以有三种尺寸,也可以是小型、中型或大型。小
public class CarPark {
Stack<Spot> smallSpots;
Stack<Spot> mediumSpots;
Stack<Spot> largeSpots;
现在,我有了一个与我的停车场类的方法,它采取了一辆车,并检查了一个地点的权利堆栈,如果一个地点是可用的,采取它
车辆可以有三种尺寸,也可以是小型、中型或大型。小型车辆可以安装在任何尺寸的点中,中型车辆可以安装在中型或大型点中,大型车辆只能安装在大型点中
我的问题是,检查给定车辆的每个堆栈最有效的方法是什么(就性能和编写的代码量而言?
我真的不想做这样的事:
if(vehicle.getSize().equals(VehicleSize.Small)){
//check small spots
//check medium spots
//check large spots
}
if(vehicle.getSize().equals(VehicleSize.Medium)){
//check medium spots
//check large spots
}
if(vehicle.getSize().equals(VehicleSize.Large)){
//check large spots
}
因为这似乎有点太硬了,而且如果我决定增加点和车辆的尺寸,它也不会缩放。您可以使用开关直通和返回来实现此(特定)情况:
switch (vehicle.getSize()) {
case VehicleSize.Small:
// check small spots, return if found
case VehicleSize.Medium:
// check medium spots, return if found
case VehicleSize.Large:
// check large spots, return if found
}
不应该有
break
语句,因此如果小型车的小型点检没有成功,那么接下来将检查中型点检,以此类推。在按下开关后,您可以抛出一个错误或返回一个null
,以指示未找到任何斑点。假设:车辆大小按自然顺序定义:
public enum VehicleSize {
SMALL, MEDIUM, LARGE;
}
public enum VehicleSize {
SUB_COMPACT, SMALL, MEDIUM, LARGE;
}
然后可能会有一个列表斑点大小
,其中每个元素的索引指的是车辆大小
的序数值,例如,斑点大小。get(1)
指的是车辆大小.中等
斑点的堆栈
List<Stack<Spot>> = new ArrayList<>(VehicleSize.values().length);
// ... init each stack, and need something to indicate how many spots are available for that VehicleSize
public boolean isParkingSpotAvailable(Vehicle v) {
for (int size = v.getSize().ordinal(); size < VehicleSize.values().length; size++) {
if (spotSizes.get(size) available spots > 0) {
return true;
}
}
return false;
}
然后,ismarkingspotavailable()
将不必更改。但是仍然需要某种方法来初始化相关堆栈,可能是在属性文件中:
SUB_COMPACT.available.spots=12
SMALL.available.spots=24
MEDIUM.available.spots=100
LARGE.available.spots=42
你说的“最好的方法”是什么意思?事实上,你的问题太主观了,不适合这个网站。@JoeC谢谢,我已经修改了
SUB_COMPACT.available.spots=12
SMALL.available.spots=24
MEDIUM.available.spots=100
LARGE.available.spots=42