黑马程序员技术交流社区
标题:
【已解决】ArrayList 练习报空指针异常看下?
[打印本页]
作者:
张文强
时间:
2012-6-2 18:54
标题:
【已解决】ArrayList 练习报空指针异常看下?
本帖最后由 张文强 于 2012-6-3 07:48 编辑
/*
功能:存储人类对象 并去除重复元素
按照同名年龄相同为同一元素
1.创建Person类
2.复写equals方法,对传入的元素判断
3.创建对象实例
4.取出元素
*/
import java.util.*;
class Person
{
private String name;
private int age;
Person(String myName,int age)
{
this.name=name;
this.age=age;
}
public boolean equals(Object obj)
{
if(!(obj instanceof Person))
return false;
Person p = (Person)obj;
return this.name.equals(p.name) && this.age==age;
}
public int myAge()
{
return age;
}
public String myName()
{
return name;
}
}
public class PersonDemo
{
public static void main(String args[])
{
ArrayList pr = new ArrayList();
pr.add(new Person("zhangsan1",51));
pr.add(new Person("zhangsan2",52));
pr.add(new Person("zhangsan3",53));
pr.add(new Person("zhangsan3",56));
pr.add(new Person("zhangsan3",53));
pr.add(new Person("zhangsan4",54));
pr.add(new Person("zhangsan5",55));
//sop(pr);
pr=guolu(pr);
Iterator it = pr.iterator();
while(it.hasNext()) //打印过滤后的元素
{
Person p = (Person)it.next();
sop(p.myName()+":::"+p.myAge());
}
}
/* public static ArrayList guolu(ArrayList al)//过滤重复元素;
{
ArrayList newal = new ArrayList();
Iterator tt = al.iterator();
while(tt.hasNext())
{
Person p1 = (Person)tt.next();
if(!newal.contains(p1))
newal.add(p1);
}
return newal;
}
public static void sop(Object obj)
{
System.out.println(obj);
}
*/
public static ArrayList guolu(ArrayList al)
{
ArrayList newa = new ArrayList();
Iterator tt = al.iterator();
while(tt.hasNext())
{
Person aa = (Person)tt.next();
if(!newa.contains(aa))
newa.add(aa);
}
return newa;
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
作者:
冯敏
时间:
2012-6-2 19:13
name属性的值都是空的,Person类里面包含所有属性的getter和setter方法,你好像没写setter方法
作者:
杜俊彪
时间:
2012-6-2 20:02
楼主能把错误信息贴出来?
作者:
杜俊彪
时间:
2012-6-2 20:34
本帖最后由 杜俊彪 于 2012-6-2 21:13 编辑
我帮你改了下,你可试下, 不过,楼主你不必这么复杂地去去除那些相同 的对象;
<blockquote>import java.util.*;
复制代码
作者:
唐辉辉
时间:
2012-6-2 21:02
楼主之所以报 Exception in thread "main" java.lang.NullPointerException 异常,是因为在其构造方法中给name赋值时变量名写错。
Person(String myName,int age)
{
this.name=name; 此处应该为 this.name=myName
this.age=age;
}
作者:
梁小波
时间:
2012-6-3 08:03
这个问题已解决吗? return this.name.equals(p.name)中的p.name怎么可以直接调用?那还要myName干什么。注意p可是传入的对象!求解!!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2