java.util.ConcurrentModificationException错误的原因及解决方法

母牛生小牛的题。

传统做法是斐波那契数列的做法,直接递归就可以。

这里想到之前做过用java面向对象的方法来做,结果iterator遍历list的时候遇到一个问题:java.util.ConcurrentModificationException


后来找到原因:定义两个类:farm,cow,其中farm中有cows的列表,每次生小牛直接farm.add(),cows中添加一个,但是没注意到我是在遍历cows时判断是否生小牛,生就添加,不生就下一个母牛。所以,如果有修改的话,修改后的cows与我正在遍历的cows产生不一致,导致“当前修改错误”。

 

改进方法:产生小牛和遍历cows不放在一起,即不用iterator进行遍历,直接用forcowssize进行遍历,每个生小牛的过程放在cow类中实现,让他自己growup,farm类只管对其中的所有小牛的每年进行监管,只遍历cows数组而已!不方便之处就在,两个类中的方法来回调用,首先farm中的produce遍历cows,调用cow中的growup方法,growup判断了会生小牛又要调用farm中的add方法做添加。因为produce中,size一开始就确定了cows.size(),所以,size一年一变,不影响产生小牛的过程。iterator不好就在于其只能hasNext()相当于动态的判断size,所以这个地方不好用。
 

代码与上次做的基本一样,直接看连接就可以:http://blog.csdn.net/gwj879/article/details/6854306

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值