//import java.util.*;
class Person {
String name;
int age;/*
public boolean equals(Person []p1,Person []p2) {
if(p1.length!=p2.length) return false;
for(int i=0;i<p1.length;i++) {
if(!p1[i].name.equals(p2[i].name)||p1[i].age!=p2[i].age) {
return false;
}
}
return true;
}*/
}
class TestA {
public static void main(String[]args) {
//int[]x = new int[]{4,5,6,6,5};
//int[]y = new int[]{4,5,6,6,5};
//System.out.println(Arrays.equals(x,y));
Person p1 = new Person();p1.name = "p1"; p1.age= 10;
Person p2 = new Person();p2.name = "p2"; p1.age= 20;
Person p3 = new Person();p3.name = new String("p1"); p3.age= 10;
Person p4 = new Person();p4.name = new String("p2"); p4.age= 20;
Person[]p = new Person[]{p1,p2};
Person[]z = new Person[]{p3,p4};
System.out.println(aquals(p,z));//==
}
public static boolean aquals(Person []p1,Person []p2) {
if(p1.length!=p2.length) return false;
for(int j=0;j<p1.length;j++) {
p1[j]=new Person();
p2[j]=new Person();
}
for(int i=0;i<p1.length;i++) {
if(!p1[i].name.equals(p2[i].name)||p1[i].age!=p2[i].age) {//Exception in thread "main" //java.lang.NullPointerException at TestA.aquals(TestA.java:37)
return false;
}
}
return true;
}
}为什么会用空指针异常啊???
class Person {
String name;
int age;/*
public boolean equals(Person []p1,Person []p2) {
if(p1.length!=p2.length) return false;
for(int i=0;i<p1.length;i++) {
if(!p1[i].name.equals(p2[i].name)||p1[i].age!=p2[i].age) {
return false;
}
}
return true;
}*/
}
class TestA {
public static void main(String[]args) {
//int[]x = new int[]{4,5,6,6,5};
//int[]y = new int[]{4,5,6,6,5};
//System.out.println(Arrays.equals(x,y));
Person p1 = new Person();p1.name = "p1"; p1.age= 10;
Person p2 = new Person();p2.name = "p2"; p1.age= 20;
Person p3 = new Person();p3.name = new String("p1"); p3.age= 10;
Person p4 = new Person();p4.name = new String("p2"); p4.age= 20;
Person[]p = new Person[]{p1,p2};
Person[]z = new Person[]{p3,p4};
System.out.println(aquals(p,z));//==
}
public static boolean aquals(Person []p1,Person []p2) {
if(p1.length!=p2.length) return false;
for(int j=0;j<p1.length;j++) {
p1[j]=new Person();
p2[j]=new Person();
}
for(int i=0;i<p1.length;i++) {
if(!p1[i].name.equals(p2[i].name)||p1[i].age!=p2[i].age) {//Exception in thread "main" //java.lang.NullPointerException at TestA.aquals(TestA.java:37)
return false;
}
}
return true;
}
}为什么会用空指针异常啊???
解决方案 »
- Swing弹出窗口后如何使当前窗口(包括windows和java生成的)不丢失焦点
- java的构造方法是什么
- 请大家说下对学习java的看法吧
- 如何用链表表示一副扑克牌,我写的一段有明显错误,但我不会改,谢谢。
- 关于Eclpise3.0的中文问题
- java使用JDBC链接数据库,不能在静态块中读取properties文件
- 【求助】下面这段 代码有什么错?为什么?
- 高手教我怎么学
- 为何用同一个Statement获得多个ResultSet时,前面的记录集就不可用了?
- 谁有办法用java执行于java.exe不在一个目录的class文件?
- 关于protobuffer传值的问题. 急!!!!!
- 小程序一枚
p1[j]=new Person(); //你这里重新new Person,那么p1[j]的name不赋值的话初始值就是null
p2[j]=new Person(); //同上
}if(!p1[i].name.equals(p2[i].name)||p1[i].age!=p2[i].age) { //所以这里的p1[i].name是null,调用null.equals,当然出现空指针错误了
for(int j=0;j<p1.length;j++) {
p1[j]=new Person();
p2[j]=new Person();
}没有了错误,但判断还是有问题啊???应该是输入true但总是false
int[]y = new int[]{4,5,6,6,5};
System.out.println(Arrays.equals(x, y));你试试看就知道结果
Arrays.equals()空指针是因为你下面的代码for (int j = 0; j < p1.length; j++) {
p1[j] = new Person();
p2[j] = new Person();
}
Person p2 = new Person();p2.name = "p2"; p1.age= 20; 应该是为p2.age赋值的,你却写成了p1
if (p1.length != p2.length){
return false;
}
for (int j = 0; j < p1.length; j++) {
Person per1 = p1[j];
Person per2 = p2[j];
for (int i = 0; i < p1.length; i++) {
if (!per1.name.equals(per2.name) || per1.age!=per2.age) {
return false;
}
}
}
return true;
}
if (p1.length != p2.length){
return false;
}
for (int j = 0; j < p1.length; j++) {
Person per1 = p1[j];
Person per2 = p2[j];
if (!per1.name.equals(per2.name) || per1.age!=per2.age) {
return false;
}
}
return true;
}
视野请转移到这里: Person p2 = new Person();
p2.name = "p2";
p1.age = 20; Person p2 = new Person();
p2.name = "p2";
p2.age = 20;
/*去你的程序里面仔细看看,copy的时候下次注意点,这种错太不好找了,眼都看花了*/
下面是改过的执行成功的代码class Person {
String name;
int age;
}public class Test {
public static void main(String[] args) {
// int[]x = new int[]{4,5,6,6,5};
// int[]y = new int[]{4,5,6,6,5};
// System.out.println(Arrays.equals(x,y));
Person p1 = new Person();
p1.name = "p1";
p1.age = 10;
Person p2 = new Person();
p2.name = "p2";
p2.age = 20;
Person p3 = new Person();
p3.name = "p1";
p3.age = 10;
Person p4 = new Person();
p4.name = "p2";
p4.age = 20; Person[] p = new Person[] { p1, p2 };
Person[] z = new Person[] { p3, p4 };
Person[] px = {p1,p2};
Person[] py = {p3,p4};
System.out.println(aquals(px,py));
System.out.println(aquals(p, z));// ==
} public static boolean aquals(Person[] p1, Person[] p2) {
boolean flag = false;
if (p1.length != p2.length){
return flag;
}
for (int j = 0; j < p1.length; j++) {
System.out.println("for");
Person per1 = p1[j];
for(int i=0;i<p1.length;i++){
Person per2 = p2[i];
if (per1.name.equals(per2.name) && per1.age==per2.age) {
flag=true;
}
}
}
/**
* 因为你无法保证数组之中第x个元素是一一对应的,所以有必要先for循环出一个数组的某个(假设为x)
* 然后再用x和另外一个for循环全部数组去比较,如果有不相同的,则false
*/
return flag;
}
}