有人可以告诉我如何从数组中删除对象。但这里有捕获(对我而言),数组就是这样的
member[0] = new Member("John Cena" , "p000001");
我希望能够搜索名称,然后在检测到名称时,能够删除。有可能吗?
public static void remove(){
System.out.println("Name: ");
String removeName = input.next();
System.out.println("ID: ");
String removeID = input.next();
for(int i = 0; i < member.length; i++){
//not sure if this is the right direction
}
}
编辑:由于分配中的要求,无法使用ArrayList或list。会使用它,因为它更容易,但不能。
答案 0 :(得分:0)
您可以使用可以填充成员的ArrayList
(或更好,ArrayList<Member>
),然后使用indexOf
方法进行搜索。
或者,如果您必须或宁愿使用数组,请创建一个循环,就像您遍历members
数组的每个索引一样。唯一棘手的部分是删除要求您从数组中删除它,然后将其前面的每个索引向下移动,以便删除空白区域。
换句话说,您需要删除索引i
并使用循环,以便将i + 1
的成员向下移动到i
,成员i + 2
向下移动到i + 1
,依此类推,直到你到达数组的末尾。
尽管如此,我还是鼓励使用ArrayList
。它完成了我刚刚为您描述的所有操作,使事情变得更加容易。
答案 1 :(得分:0)
阵列是固定大小的。这意味着您可以为对象数组执行的最佳操作将值设置为null。如果您想完全删除它,则需要使用ArrayList
。在那种情况下,
ArrayList<Member> members = new ArrayList<Member>();
for (int i = members.length-1; i>=0; i--) {
if (members.get(i).getName().equals(toRemove)) {
members.remove(i);
}
}
答案 2 :(得分:0)
对不起我之前的错误答案。这应该是删除会员的正确方法
List<Member> l = new ArrayList<>(Arrays.asList(member));
for (Iterator<Member> iter = l.listIterator(); iter.hasNext(); ) {
Member a = iter.next();
if ( (a.getId() == removeID) || (removeName.equals(a.getName)) ) {
iter.remove();
}
}
Member[] newMembers = l.toArray(new Member[l.size()]);
PS:请像这样获取removeID;
int removeID = input.nextInt();
答案 3 :(得分:0)
你 使用数组有点不可思议,因为:
虽然仍然可以做到。这是使用Java 8的Stream API的一个例子。
我们假设您正在寻找具有相同名称和ID的List
。然后,您想要过滤掉不该条目的所有元素,将它们收集到List
,然后将该member = Arrays.stream(member)
.filter(m -> removeName.equals(m.getName())
&& removeID.equals(m.getID()))
.collect(Collectors.toList())
.toArray(new Member[0]);
转换为数组
结果将是:
func main() {
foo := 1
go func() {
fmt.Println(foo)
}()
}