【问题标题】:Java: Remove a specified item a set if it presentJava:如果存在,则删除指定的项目
【发布时间】:2015-02-03 05:53:17
【问题描述】:

如果存在,我如何从该集合中删除指定的项目?如果集合被修改,则返回 true,否则返回 false。

目前,除了 remove() 方法外,一切都正常。

import java.util.Iterator;

public class Set300<T> implements Iterable<T> {

  private Bag<T> bag = new Bag<T>(); 

  public boolean contains(T item) {
      for (T i : bag){
          if (i.equals(item)) return true;
      }
      return false;
  }

  public boolean add(T item) {
      if (contains(item)){
          return false;
      }
      else{
          bag.add(item);
          return true;
      }
  }

  public boolean remove(T item) {
      if (contains(item)){
          return false;
      }
      else{
          Iterator <T> i = bag.iterator();
          while (i.hasNext() == true)

              if (i.next().equals(item));{
                  i.remove(item);
              }
          return true;
      }
  }

  public Iterator<T> iterator() {
      return bag.iterator();
    }
}

如果包中不包含该项目,则 remove() 方法应返回 false;否则,将其删除。 它不返回真假,也不从集合中删除一个数字

【问题讨论】:

  • 如果包含item,返回false?
  • 什么'不起作用'?
  • @sqrd 尝试从 if 语句中删除 ;,在此处删除分号 if (i.next().equals(item));{
  • @SotiriosDelimanolis:如果包中不包含该物品,则返回 false;否则,删除它。
  • @ramp: remove() 方法不返回真假,也不从集合中删除数字

标签: java iterator set boolean


【解决方案1】:

我认为您编写的代码有错误。您的 remove() 正在检查集合中是否存在某个项目,如果它找到该项目,它将返回 false 而不是删除它。尝试将您的 remove() 替换为:

public boolean remove(T item) {
  if (contains(item)){
      Iterator <T> i = bag.iterator();
      while (i.hasNext() == true)

          if (i.next().equals(item)){
              i.remove(item);
          }
      return true;

  }
  else{
      return false;
  }

【讨论】:

猜你喜欢
  • 2016-01-23
  • 2012-03-25
  • 2014-03-08
  • 1970-01-01
  • 2020-04-28
  • 2013-03-02
  • 2021-12-09
  • 2011-06-22
  • 1970-01-01
相关资源
最近更新 更多