我被要求为我的作业演示 Singleton类设计。我提交的版本使用字符串并且工作正常,但我无法使 reserveLane 方法与整数一起正常工作。每当我在下面的代码中调用 reserveLane 方法时,它会删除传递给它的整数索引的元素,而不是包含与传入的整数匹配的值的元素。该程序应该在 removeLane 方法中打印每条消息一次。
import java.util.*;
public class Race {
// store one instance
private static final Race INSTANCE = new Race(); // (this is the singleton)
List<Integer> lanes = new ArrayList<>();
public static Race getInstance() { // callers can get to
return INSTANCE; // the instance
}
private Race() {
lanes.add(1);
lanes.add(2);
}
public void removeLane(int lane) {
if(lanes.contains(lane)){
lanes.remove(lane);
System.out.println("Lane successfully reserved.");
} else {
System.out.println("Lane is already reserved.");
}
}
public static void main(String[] args) {
assignLane(1);
assignLane(1);
}
private static void assignLane(int lane) {
Race race = Race.getInstance();
race.removeLane(lane);
}
}
我想知道我是否在浪费时间尝试这条路线,还是有办法解决这个问题?
答案 0 :(得分:3)
Integer integer = new Integer(lane);
lanes.remove(integer);
您的lanes
是Integer
个对象的arraylist,而不是int
。将int
传递给Arraylist.remove(int index)
将删除该索引处的对象,但如果传递Integer
对象,则remove()
函数将删除该对象的第一个匹配项。< / p>
答案 1 :(得分:0)
您正在使用基本类型来删除元素。您可以将它转换为Wrapper类并执行它。更改removeLane
方法,如下所示:
public void removeLane(Integer lane) {
if(lanes.contains(lane)){
lanes.remove(lane);
System.out.println("Lane successfully reserved.");
}
else{
System.out.println("Lane is already reserved.");
}
}
答案 2 :(得分:0)
ArrayList文档
E remove(int index)
- 删除此列表中指定位置的元素。
boolean remove(Object o)
- 从该列表中删除指定元素的第一个匹配项(如果存在)。
由于您已向方法int
发送了remove
原始类型,因此已调用remove(int index)
。而只是发送一个Integer
对象,然后它将调用方法remove(Object o)
,它将正常工作。
工作代码:
package stackoverflow;
import java.util.ArrayList;
import java.util.List;
public class Race {
private static final Race INSTANCE // store one instance
= new Race(); // (this is the singleton)
List<Integer> lanes = new ArrayList<>();
public static Race getInstance() { // callers can get to
return INSTANCE; // the instance
}
private Race() {
lanes.add(1);
lanes.add(2);
}
public void removeLane(int lane) {
if (lanes.contains(lane)) {
lanes.remove((Integer) lane);
System.out.println("Lane successfully reserved.");
} else {
System.out.println("Lane is already reserved.");
}
}
public static void main(String[] args) {
assignLane(1);
assignLane(1);
}
private static void assignLane(int lane) {
Race race = Race.getInstance();
race.removeLane(lane);
}
}