将引用对象添加到固定数组

时间:2014-02-28 20:58:32

标签: java arrays

我正在尝试将Shoe类型的对象添加到Shoe类型的固定数组中,但我遇到了问题。

在addShoe方法中,我试图将shoe类型的引用添加到sh数组中,如下所示:sh.add(s);

当我试图运行它时,我收到此错误:

无法在数组类型Shoe []上调用add(Shoe) Eclipse建议我将其更改为“长度”并且不会产生敏感

我也在想我可以像这样写一个addShoes方法的其他部分:

 
    public void addShoe(Shoe s) throws ShoeException
    {
        if(s.getId() < 0) {
            throw new ShoeException(s);
        }
                else {
                        if(numShoes<=10){
                            sh = Arrays.add(s, numShoes);
                            numShoes++;
                        }
                }
         }

这只是其中一个想法。这是正确的方法吗?

 
    public class TestShoe {

public static void main(String[] args) {

    ShoeProcessor s = new Shoe();
    Shoe s1 = new Shoe(7, "Black");
    Shoe s2 = new Shoe(10, "Red");

    try {
        s.addShoe(s1);
                    s.addShoe(s2);

    }catch(ShoeException bex){
        System.out.println("Shoe Exception:  "  + bex);
    }

} }

public class ShoeProcessor
{
private Shoe [] sh;
private int numShoes=0;
private ShoeComparator<Shoe> sc;

public ShoeProcessor()
{
    sh = new Shoe [10];
    sc=new ShoeComparator<Shoe>();
}


public void addShoe(Shoe s) throws ShoeException
{
    if(s.getId() < 0) {
        throw new ShoeException(s);
    }
    else {
        sh.add(s);
        numShoes++;
    }
}
}

public static void main(String[] args) { ShoeProcessor s = new Shoe(); Shoe s1 = new Shoe(7, "Black"); Shoe s2 = new Shoe(10, "Red"); try { s.addShoe(s1); s.addShoe(s2); }catch(ShoeException bex){ System.out.println("Shoe Exception: " + bex); }

感谢您的帮助

我想补充说我需要使用固定大小的数组鞋。

我还想补充一点,我不想扩展数组sh。我可以添加最多10个类型为Shoe的引用。这就是为什么我还要计算添加的鞋子数量。

2 个答案:

答案 0 :(得分:1)

Java中的数组具有固定的大小。您有两种选择:

  • 切换为使用List。当您向其添加更多项目时,这可以动态增长。要实施,您可以使用ArrayListLinkedList

  • 每次需要添加时,请尝试使用System.arraycopy调整阵列大小。我不推荐这个。在内部,这实际上是ArrayList所做的事情,但如果您愿意,可以手动执行此操作。

编辑:刚看到你的编辑。你可以这样做:

public void addToList(Shoe shoe) {
    if(shoeList.size() < 10) {
        shoeList.add(shoe);
    }
}

shoeArrayCount = 0;
public void addToArray(Shoe shoe) {
    if(shoeArrayCount < 10) {
        shoeArray[shoeArrayCount] = shoe;
        shoeArrayCount++;
    }
}

取决于您选择使用哪种方法。

答案 1 :(得分:1)

可能我错过了一些东西:你想用sh.add(s);替换sh[numShoes]= s;吗?