如何使用用户输入从数组中删除对象

时间:2016-05-27 14:26:22

标签: java arrays user-input

有人可以告诉我如何从数组中删除对象。但这里有捕获(对我而言),数组就是这样的

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。会使用它,因为它更容易,但不能。

4 个答案:

答案 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)

使用数组有点不可思议,因为:

  • 您无法真正保证不会有多个具有相同名称的人,因为该阵列不保证唯一条目。< / LI>
  • 阵列不会动态调整大小,让您必须自己动手。

虽然仍然可以做到。这是使用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)
  }()
}