package homework4;public class Student {
String name;
int age;
// 隐藏了无形参的构造方法
// 当写此方法时自动消失,无论有无形参
Student deskmate; Student() {
System.out.println("产生对象时,调用此构造方法1!");
}; Student(String name, int age) {
this.name = name;
this.age = age;
this.setDeskmate(deskmate);
System.out.println("产生对象时,调用此构造方法2!");
} void setName(String name) {
this.name = name;
} String getName() {
return name;
} void setAge(int age) {
this.age = age;
} int getAge() {
return age;
} void setDeskmate(Student aa) {
if (this.deskmate == deskmate)
return; this.deskmate = getDeskmate();
aa.setDeskmate(this); } Student getDeskmate() {
return deskmate;
}
}package homework4;import java.util.Scanner;public class CheckStudent {
public static void main(String[] args) { // Student student1 = new Student();
Student[] classone = new Student[3];
classone[0] = new Student("zhangsan", 20);
classone[1] = new Student("lisi", 21);
classone[2] = new Student("wangwu", 20);
// 产生两个Student对象
Student student1 = classone[0];
System.out.println(student1.getName());
Student student2 = classone[1];
System.out.println(student2.getName());
// ****************
System.out.println("====================");
// student2.setName("aa");
student1.setDeskmate(student2);
System.out.println("yichangchu->");
// ??????????????????
// 要求打印出student1的同桌是谁,
//相应student2的同桌也是student1,并打印出来
System.out.println(student2.getDeskmate().name);
//
// 空指针异常,不知道错在哪里?
// *****************
}}

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【zhoufeng345678】截止到2008-07-17 20:46:34的历史汇总数据(不包括此帖):
    发帖的总数量:16                       发帖的总分数:1070                     每贴平均分数:66                       
    回帖的总数量:7                        得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:14                       结贴的总分数:990                      
    无满意结贴数:1                        无满意结贴分:20                       
    未结的帖子数:2                        未结的总分数:80                       
    结贴的百分比:87.50 %               结分的百分比:92.52 %                  
    无满意结贴率:7.14  %               无满意结分率:2.02  %                  
    楼主加油
      

  2.   

    if (this.deskmate == deskmate) 
    return;因为这个条函数永远成立。
    this.deskmate和deskmate 是一个东西。
    而且下面的this.deskmate = getDeskmate(); 
    aa.setDeskmate(this);
    也有问题。会无限递归调用
      

  3.   


     Student deskmate;    Student(String name, int age) {
            this.name = name;
            this.age = age;
            this.setDeskmate(deskmate);//这句有问题
            System.out.println("产生对象时,调用此构造方法2!");
        }
     void setDeskmate(Student aa) {
            if (this.deskmate == deskmate) {
                return;
            }
            this.deskmate = getDeskmate();
            aa.setDeskmate(this);    } this.setDeskmate(deskmate);
    看看你的这几个方法,deskmath转来转去一直是null
      

  4.   

    void setDeskmate(Student aa) { 
    if (this.deskmate == deskmate) 
    return; 把这一句改成if (this.deskmate == aa)试试 
      

  5.   


    //设置同桌的方法修改一下就可以了 你的思维太乱了  就是一个互为同桌的关系
    void setDeskmate(Student aa) {
    if (this.deskmate == aa) {
     return;
    }
              this.deskmate = aa;
      aa.setDeskmate(this);
    }