现在假设有一个类叫RainfallRecord,即降雨量记录,包含3个属性:城市,年份,和一个12元数组记录该市该年每月的降雨量。(城市+年份 不重复)
还有一个类Archive,即档案馆,包含一个HashSet<RainfallRecord>,来保存上面的记录。
另外还有一个Driver。其他方法诸如插入记录等皆已写好。
现在要求实现一个方法,来删除指定 城市+年份 的记录,请问如何实现?------------------
各位高手帮帮忙啊!

解决方案 »

  1.   


    public static void deleteRecord(Archive arc,String cityName,int year){
    for(RainfallRecord rr: arc.rainfallDatabase){
    if(rr.cityName.equals(cityName)&&rr.year==year){
    arc.delete(rr);
    }
    }
    }
    我编辑了以上方法,却出现了以下错误:
    Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
    at java.util.HashMap$KeyIterator.next(HashMap.java:828)
    at Driver.deleteRecord(Driver.java:35)
    at Driver.main(Driver.java:57)
      

  2.   

    RainfallRecord 没有实现Iterable接口。
      

  3.   

    结合网上找的资料实现了目标,方法如下: public static void deleteRecord(Archive arc,String cityName,int year){
    for(Iterator<RainfallRecord> it= arc.rainfallDatabase.iterator();it.hasNext();){
    RainfallRecord rr=it.next();
    if(rr.cityName.equals(cityName)&&rr.year==year){
    it.remove();
    }
    }
    }
    但是还是很不明白,因为还没有学到接口,哪位前辈能简明地解释给我这个新手听一下这段代码呢?
      

  4.   


    public static void deleteRecord(Archive arc,String cityName,int year){
    RainfallRecord temp = null;//定义一个变量用来保存要删除的记录,然后等遍历完后再进行删除操作
        for(RainfallRecord rr: arc.rainfallDatabase){
            if(rr.cityName.equals(cityName)&&rr.year==year){
                temp = rr;
                break;
            }
        }
        arc.delete(temp);
    }在遍历的同时不能执行删除操作!
      

  5.   


    “foreach”语句中,可以循环遍历 数组对象、集合对象、自定义的对象,
    但是,前提条件是:
      集合对象,是JDK本身提供的那些对象,他们都实现Iterator接口;
      自定义的对象,必须要有相关的Iterator实现。所以Archive implements Iterable<RainfallRecord >
    在Archive类内 方法重写
    public Iterator<RainfallRecord > iterator() {
          
        }
    大致方法本来应该这样吧。
      

  6.   

    3楼的我说错了
    应该是
    Archive 类没有实现Iterable接口。
      

  7.   

    HashSet循环遍历时应该有iterator.Archive 类应实现Iterable接口。