我正在完成一个类赋值,我不知道如何从数组中删除一个元素。我已经阅读了使用ArrayUtils或将数组转换为链表的建议。我还是Java的新手,所以我不确定我是否真的需要做这样的事情,或者我是否忽略了一些更简单的事情。我还需要完成一些需要跳过数组中所有null元素的进程。我没有一位优秀的教授,而且沟通尝试也是徒劳的,所以我希望有人可以提供帮助。我的代码如下。相关位从“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;
}
}
答案 0 :(得分:2)
ArrayList
是一个内置类,提供对元素的索引访问,删除任意元素的能力以及动态扩展。
答案 1 :(得分:2)
由于这是一个类赋值,我只提供算法在数组中实现remove方法(假设这是一个算法过程):
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
并使用它,因为它已经为你实现了所有这些方法。
答案 2 :(得分: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;
}
您应尽量使解决方案尽可能简单。
答案 3 :(得分:0)
这里你想要的只是处理Watch对象,所以你不需要使用数组。
是开展工作的最佳方式。
该类具有访问索引元素,删除索引元素,数组动态扩展等方法。
该链接指向ArrayList类的官方文档。
答案 4 :(得分:0)
使用Arraylist而不是数组。如果您已有数组,请将其转换为A