A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张甲甲 中级黑马   /  2013-5-26 22:48  /  1955 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张甲甲 于 2013-5-27 10:04 编辑

我在一个ArraylistList里面加入了几个学生对象 我想删除其中的女学生
可是老是出异常
请大家帮着看看 我是菜鸟 真心求指点

代码如下:
package com.itheima;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Iterator;

import javax.swing.JOptionPane;
public class Test{
public static void main(String args[]) throws IOException
{
        ArrayList al=new ArrayList();
        al.add(new Student('男',20,"zhang1"));
        al.add(new Student('女',21,"zhang2"));
        al.add(new Student('男',22,"zhang3"));
        al.add(new Student('女',22,"zhang4"));
        Iterator it=al.iterator();
        while(it.hasNext()){
                Student s=(Student) it.next();
                if(s.sex=='女'){
                        al.remove(s);
                        
                }
               
        }
}
}

class Student {
        char sex;
        int age;
        @Override
        public String toString() {
                return "Student [sex=" + sex + ", age=" + age + ", name=" + name + "]";
        }
        String name;
        public Student(char sex, int age, String name) {
                super();
                this.sex = sex;
                this.age = age;
                this.name = name;
        }
        
        
}


评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

7 个回复

倒序浏览
if(s.sex.equals('女')){    >>>最好用equals
           al.remove(s);
  }

你把class Student 前面加一个public,再试试,我记得以前也出现过错误,就是访问修饰符不一致的问题

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
王溢君 来自手机 中级黑马 2013-5-26 23:05:18
藤椅
迭代时,不能使用集合的方法操作元素。懂吗?得使用迭代器的方法删除。
回复 使用道具 举报
王溢君 发表于 2013-5-26 23:05
迭代时,不能使用集合的方法操作元素。懂吗?得使用迭代器的方法删除。

不懂 能不能说的详细点啊 谢了 啊
回复 使用道具 举报
王溢君 来自手机 中级黑马 2013-5-26 23:20:49
报纸
就是你在使用迭代器遍历集合时。只能使用迭代器的方法删除元素。。。。。不能用集合本身的方法删。   if(s.sex=='女'){
                        al.remove(s);
                       
                }改下it.remove();就是了。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
  if(s.sex=='女'){
                        al.remove(s);
         }
并发修改异常;
使用Iterator迭代器迭代的时候是不能增删的;
如果确实要的话使用listIterator迭代器;
至于为什么迭代的时候不能进行增删操作;
参照线程锁的概念去理解;
不过现在建议使用jdk1.5的并发集合;
希望对你有用

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
王溢君 发表于 2013-5-26 23:20
就是你在使用迭代器遍历集合时。只能使用迭代器的方法删除元素。。。。。不能用集合本身的方法删。   if(s. ...

嗯 能用了 就是不大明白原理
谢了
回复 使用道具 举报
毕老师好像在视频里说过,迭代时不要操作元素。
你这个解决方法:

将迭代换成高级for循环, 那个不知道你学没学呢..
先告诉你个格式,如果没学到你学的时候就明白了。

  1. for(Student al1:al)
  2.                         {
  3.                                 System.out.println(al1.toString());
  4.                         }
复制代码
从你那iterator那 一直删到while循环结束  换成这个。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马