我有一个集合,我想实现add()方法,这样只能将正整数添加到集合中。该集合可以包含4个值,我使用下面的代码将每个值初始化为“-1”。
public class Bag implements Collection {
private int[] elements;
public Bag() {
elements = new int[Runner.SIZE_OF_COLLECTION];
for (int i = 0; i < Runner.SIZE_OF_COLLECTION; i++) {
elements[i] = -1;
}
}
到目前为止,在下面的方法add()中,我有这个循环迭代集合中的每个元素,并用我想要添加的正整数(“toAdd”)替换小于0的每个元素。
问题是,我只想添加正整数“toAdd”一次,并且在循环中没有中断,该方法用正整数替换集合中的每个元素“-1”。随着循环的中断,该方法根本无法添加正整数。关于我如何才能获得方法只将正整数添加到集合中的任何想法?
public void add(int toAdd) {
for (int i = 0; i < Runner.SIZE_OF_COLLECTION; i++) {
if (elements[i] <= 0 && toAdd>0) {
elements[i] = toAdd;
}
break;
}
}
提前致谢!
答案 0 :(得分:1)
将中断移动到if语句中。
答案 1 :(得分:0)
您可以使用ArrayList而不是int数组。使用ArrayList,您可以获得第一次出现的索引-1并使用set方法在该索引处添加新值。
答案 2 :(得分:0)
这将使用elements
参数的值替换toAdd
中的第一个值,该值等于或小于0。
public void add(int toAdd) {
for (int i = 0; i < Runner.SIZE_OF_COLLECTION; i++) {
if (elements[i] <= 0 && toAdd>0) {
elements[i] = toAdd;
break;
}
}
}
答案 3 :(得分:0)
接口Collection的add方法采用Object(或未指定的泛型类型)。如果您尝试使用add方法覆盖/实现集合接口方法,则方法签名不正确,并且永远不会被调用。
你的班级需要看起来像:
public class Bag implement Collection<Integer>
{
// ... other necessary methods
public boolean add(Integer i)
{
// your method...
}
}
可能比您的实施更容易:
public class Bag extends java.util.ArrayList<Integer>
{
@Override
public boolean add(Integer i)
{
if ((i != null) && (i > 0)) super.add(e);
}
}
您可能还需要覆盖其他添加方法,但事实上,最好封装ArrayList而不是扩展它。