2012-01-30 65 views
0

我有一个集合,我想实现add()方法,只有正整数才能添加到集合中。该集合可以保存4个值,并且我已经使用下面的代码将每个值初始化为“-1”。Java:删除集合中的元素

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”一次,并且在循环中没有中断,该方法用正整数替换集合中的EVERY元素“-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

我怀疑元素数组是空的。尝试打印出添加方法内的大小和内容。 – kosa 2012-01-30 20:50:33

+0

标题有点误导......我相信你可能不得不在设计过程中多花一点时间来解决这个问题。另外,什么是亚军? – Gevorg 2012-01-30 20:52:58

+0

Runner是设置集合大小的类,是的,我在标题中的意思是“添加”方法到集合,而不是“去除” – user1178874 2012-01-30 20:56:34

回答

1

将中断移入if语句。

+0

已经尝试过,并且它仍然不会让我添加一个积极的整数:(谢谢虽然! – user1178874 2012-01-30 20:44:36

+0

结果是什么?所有-1?尝试打印Runner.SIZE_OF_COLLECTION的值在add() – RussS 2012-01-30 20:46:46

+0

是啊,全是-1 – user1178874 2012-01-30 20:53:09

0

您可以使用ArrayList而不是int数组。使用ArrayList,您可以获得-1的第一个出现索引,并使用set方法在该索引处添加新值。

0

这将替换从elements开始的第一个值,该值等于或小于0,值为toAdd参数。

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

接口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而不是扩展它会更好。

+0

我明白了!谢谢大家:) – user1178874 2012-01-30 22:46:31