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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 心?=忐§忑] 中级黑马   /  2014-4-17 08:53  /  662 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package 多对多关系;

  2. import java.util.ArrayList;
  3. import java.util.List;


  4. public class Student {
  5.    
  6.         private String name ;
  7.         private int age ;
  8.     private List<Count> allCount ;
  9.    
  10.     public Student(){
  11.             this.allCount = new ArrayList<Count>() ;
  12.     }
  13.         public Student(String name , int age ){
  14.                 this.name = name ;
  15.                 this.age = age ;
  16.         }
  17.        
  18.         public String getName(){
  19.                 return name ;
  20.         }
  21.         public void setName(String name){
  22.                 this.name = name ;
  23.         }
  24.         public int getAge(){
  25.                 return age ;
  26.         }
  27.         public void setAge(int age){
  28.                 this.age = age ;
  29.         }
  30.         public List<Count> getCount(){
  31.                 return allCount ;
  32.         }
  33.         public void setSchool(List<Count> allCount){
  34.                 this.allCount = allCount ;
  35.         }
  36.        
  37.         public String toString(){
  38.                 return "姓名:" + this.name + "  年龄:" + this.age  ;
  39.         }
  40. }


  41. package 多对多关系;

  42. import java.util.ArrayList;
  43. import java.util.List;

  44. public class Count {
  45.      private String name ;
  46.      private float credit ;
  47.      private List<Student> allStudent ;  //一门课程有多个学生
  48.      
  49.      public Count(){
  50.              this.allStudent = new ArrayList<Student>() ;
  51.      }
  52.      public Count(String name , float credit){
  53.              this() ;
  54.              this.name = name ;
  55.              this.credit = credit ;
  56.      }
  57.      public String getName(){
  58.              return name ;
  59.      }
  60.      public void setName(String name){
  61.              this.name = name ;
  62.      }
  63.      public float getCredit(){
  64.              return credit ;
  65.      }
  66.      public void setCredit(float credit){
  67.              this.credit = credit ;
  68.      }
  69.      public List<Student> getAllStudent(){
  70.              return allStudent ;
  71.      }
  72.      public void setAllStudent(List<Student> allStudent){
  73.              this.allStudent = allStudent ;
  74.      }
  75.      public String toString(){
  76.              return "课程名称:" + this.name + " 课程成绩:" + this.credit ;
  77.      }
  78. }


  79. package 多对多关系;

  80. import java.util.Iterator;

  81. import 多对多关系.Student;
  82. import 多对多关系.Count;

  83. public class TextDemo {
  84.     public static void main(String args[]){
  85.             Count c1 = new Count("java基础" , 30 ) ;
  86.             Count c2 = new Count("计算机基础" , 25 ) ;
  87.             Student stu1 = new Student("张三" , 21) ;  //实例化学生类
  88.             Student stu2 = new Student("李四" , 22) ;  //实例化学生类
  89.             Student stu3 = new Student("阿菜" , 20) ;  //实例化学生类
  90.                c1.getAllStudent().add(stu1) ;
  91.                c1.getAllStudent().add(stu2) ;
  92.                c1.getAllStudent().add(stu3) ;
  93.                
  94.                c2.getAllStudent().add(stu1) ;
  95.                c2.getAllStudent().add(stu2) ;
  96.                c2.getAllStudent().add(stu3) ;
  97.                
  98.                stu1.getCount().add(c1) ;
  99.                stu1.getCount().add(c2) ;
  100.                stu2.getCount().add(c1) ;
  101.                stu2.getCount().add(c2) ;
  102.                stu3.getCount().add(c1) ;
  103.                stu3.getCount().add(c2) ;
  104.                
  105.                System.out.println(c1);
  106.                Iterator<Student> iter = c1.getAllStudent().iterator() ;
  107.                while(iter.hasNext()){
  108.                        Student s = iter.next() ;
  109.                        System.out.println(s) ;
  110.                }
  111.     }
  112. }
复制代码

运行时出错:Exception in thread "main" java.lang.NullPointerException
at 多对多关系.TextDemo.main(TextDemo.java:23)

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

2 个回复

倒序浏览
应该是Student类中有参数的构造函数引用了Object类中默认的构造器,导致的allCount = null空指针异常;
  1.     public Students(String name , int age ){
  2.                 this();
  3.             this.name = name ;
  4.             this.age = age ;
  5.     }
复制代码
回复 使用道具 举报
可以明确 你的问题出在student上面


  1. public class Student {
  2.    
  3.         private String name ;
  4.         private int age ;
  5.     private List<Count> allCount ;
  6.    
  7.     public Student(){
  8. //这句没有用到,所以在new Student(name,age)的时候,allCount指向null;
  9.             this.allCount = new ArrayList<Count>() ;
  10.     }
  11.         public Student(String name , int age ){
  12. 而在主函数中你直接getAllcount(),返回的是null;不能add
  13. 所以应该将空构造方法的 this.allCount= new ArrayList<Count>() ;放到这个构造方法中
  14.                 this.name = name ;
  15.                 this.age = age ;
  16.                 this.allCount= new ArrayList<Count>() ;
  17.         }
  18.         
  19.         public String getName(){
  20.                 return name ;
  21.         }
  22.         public void setName(String name){
  23.                 this.name = name ;
  24.         }
  25.         public int getAge(){
  26.                 return age ;
  27.         }
  28.         public void setAge(int age){
  29.                 this.age = age ;
  30.         }
  31.         public List<Count> getCount(){
  32.                 return allCount ;
  33.         }
  34.         public void setSchool(List<Count> allCount){
  35.                 this.allCount = allCount ;
  36.         }
  37.         
  38.         public String toString(){
  39.                 return "姓名:" + this.name + "  年龄:" + this.age  ;
  40.         }
  41. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马