-1

我正在完成一个类分配,但我不确定如何从数组中删除一个元素。我已经阅读了使用 ArrayUtils 或将数组转换为链表的建议。我对 Java 还是很陌生,所以我不确定我是否真的需要做这样的事情,或者我是否忽略了一些更简单的事情。我还需要完成几个需要跳过数组中所有空元素的过程。我没有一个很好的教授,沟通尝试是徒劳的,所以我希望这里有人能提供帮助。我的代码如下。相关位从“public void remove”开始。我只是在这个类中发布所有代码,以便更全面地了解正在发生的事情:

public class WatchCollection
{   

private Watch watches[];    // an array of references to Watch objects
                            // watches[i] == null if there is no watch in position i
private int num;            // size of the array

private void init(int numberOfWatches) {
    watches = new Watch[numberOfWatches];
    for (int i=0;i<numberOfWatches;++i)
    {
        watches[i] = null;
    }
    num = numberOfWatches;
}
public WatchCollection(int numberOfWatches)
{   
    init(numberOfWatches);
}
public WatchCollection (Watch  w1)
{
    init(1);
    add(w1);            
}

// TODO Define WatchCollection (Watch w1, Watch w2) constructor
public WatchCollection (Watch w1, Watch w2)
{
}

// TODO Define WatchCollection (Watch w1, Watch w2, Watch w3) constructor
public WatchCollection (Watch w1, Watch w2, Watch w3)
{
}

public void add    ( Watch w )
{
    for(int i=0;i<num;++i)
    {
        if (watches[i]==null)
        {
            watches[i]=w;
            return;
        }
    }
}
public void remove ( Watch w )
{
    // TODO Write a code that removes Watch w if it is in the array

}

public int size()
{
    // TODO Write a code that returns actual number of watches, skip all null array elements
}

public Watch at( int index)
{
    // TODO Write a code that returns a watch with the specified index (skip all null array elements)
    // TODO Throw an exception if the index is < 0 or >= actual number of watches
    // For example, if the array contains w1 w2 null w3 w4
    // index 0 -> w1
    // index 1 -> w2
    // index 2 -> w3
    // index 3 -> w4
    // index 4 -> an exception

}

public String toString()
{
    String str="{\n";

    int index=0;
    for(int i=0;i<num;++i)
    {
        if (watches[i]!=null)
        {
            str+=" " +index++ + ": " +watches[i] + "\n";
        }
    }
    str+=" }";
    return str;      
 }
}
4

5 回答 5

2

由于这是一个类分配,我将只提供在您的数组中实现删除方法的算法(假设这是一门算法课程):

function remove (Element element)
    int index <- -1
    for i <- 0 to num - 1
        if (array[i] is equals to element) then
            index <- i
            break
        end if
    end for
    if index > -1 then
        for i <- index to num - 2
            array[i] <- array[i+1]
        end for
        num <- num - 1
    end if
end function

如果这是关于 Java 编程的练习,最好声明ArrayList并使用它,因为它已经为您实现了所有这些方法。

于 2013-06-16T18:55:14.470 回答
2

ArrayList是一个内置类,提供对元素的索引访问、删除任意元素的能力和动态扩展。

于 2013-06-16T18:41:54.460 回答
1

在不给您答案的情况下,以下是您可以如何改进的方法。

public class WatchCollection {
    private Watch watches[];    // an array of references to Watch objects
    // watches[i] == null if there is no watch in position i
    private int num = 0;        // size of the array used.

    public WatchCollection(int numberOfWatches) {
        watches = new Watch[numberOfWatches];
    }

    public WatchCollection(Watch w1) {
        this(1);
        add(w1);
    }

    public void add(Watch w) {
        if (watches.length == num + 1)
            watches = Arrays.copyOf(watches, num*2);
        watches[num++] = w;
    }

你应该尽量让你的解决方案尽可能简单。

于 2013-06-16T19:07:26.157 回答
0

使用 Arraylist 而不是数组。如果您已经有一个数组,请将其转换为 A

于 2013-06-18T07:40:22.077 回答
0

在这里,您只需要处理 Watch 对象,因此您不需要使用数组。

使用数组列表

是完成工作的最佳方式。

此类具有访问索引元素、删除索引元素、数组动态扩展等方法。

该链接指向 ArrayList 类的官方文档。

于 2013-06-16T19:08:24.983 回答