黑马程序员技术交流社区

标题: 为何又是空指针异常 [打印本页]

作者: 威威是超人    时间: 2016-9-16 23:06
标题: 为何又是空指针异常
package an.itcast_work;

import java.util.Scanner;

public class TestDemo3 {
        public static void main(String[] args) {
                Scanner sc=new Scanner(System.in);
                StringBuffer [] sbb=new StringBuffer[5];
               
                Student st=new Student();
                st.setName(sc.next());
                st.setAge(sc.nextInt());
                sbb[1].append(st.getName()).append(" ").append(st.getAge());
//                Exception in thread "main" java.lang.NullPointerException
//                at an.itcast_work.TestDemo3.main(TestDemo3.java:13)
                System.out.println("***************");
               
                Student st1=new Student();
                st1.setName(sc.next());
                st1.setAge(sc.nextInt());
                sbb[1].append(st1.getName()).append(" ").append(st1.getAge());
                System.out.println("***************");
               
                Student st2=new Student();
                st2.setName(sc.next());
                st2.setAge(sc.nextInt());
                sbb[2].append(st2.getName()).append(" ").append(st2.getAge());
                System.out.println("***************");
               
                Student st3=new Student();
                st3.setName(sc.next());
                st3.setAge(sc.nextInt());
                sbb[3].append(st3.getName()).append(" ").append(st3.getAge());
                System.out.println("***************");
               
                Student st4=new Student();
                st4.setName(sc.next());
                st4.setAge(sc.nextInt());
                sbb[4].append(st4.getName()).append(" ").append(st4.getAge());
                System.out.println("***************");
               
                for (int i = 0; i <sbb.length; i++) {
                        System.out.println(sbb[i].toString());
                }
        }

}



作者: liuyuan_8023    时间: 2016-9-17 12:33
起码错误异常粘贴出来啊,直接一堆代码,谁有那耐心。。。
作者: dedong    时间: 2016-9-17 13:26
StringBuffer [] 里都是null,你使用sbb[1]调用append方法是。sbb[1]为null。当然报空指针异常。。。你需要先往数组里添加五个StringBuffer实例
作者: litianji2016    时间: 2016-9-17 16:21
StringBuffer [] sbb=new StringBuffer[5];这么声明只是声明了一个StringBuffer的对象数组,但是你没往其中存入StringBuffer对象,可以理解为你向内存申请了能装5个StringBuffer对象的内存,但是你这么写只是说明了这快内存是用来装StringBuffer对象,没有实际向其中存入StringBuffer对象,在下面加入下面的代码就好了

for(int i=0;i<5;i++){
ssb[i]=new StringBuffer();
}

作者: 威威是超人    时间: 2016-9-17 22:57
liuyuan_8023 发表于 2016-9-17 12:33
起码错误异常粘贴出来啊,直接一堆代码,谁有那耐心。。。

抱歉,对不起{:2_39:}
作者: 威威是超人    时间: 2016-9-17 23:00
dedong 发表于 2016-9-17 13:26
StringBuffer [] 里都是null,你使用sbb[1]调用append方法是。sbb[1]为null。当然报空指针异常。。。你需要 ...

恩,明白了,其实我的要求就是往数组里放五个学生对象。
作者: 18088086590    时间: 2016-9-18 00:19
楼主的代码写的辣眼睛,已经没有欲望看了,\\\
作者: 小坏孩    时间: 2016-9-18 20:42
进啦看了看, 发现我并不能看懂...
作者: CreScert    时间: 2016-9-18 20:52
就是啊,刚开始的StringBuffer的对象数组只是申请了空间,你拼接自然报空指针啊。建议在有问题的代码中自己多改改,这样自己能够得到更多知识
作者: 威威是超人    时间: 2016-9-18 22:43
18088086590 发表于 2016-9-18 00:19
楼主的代码写的辣眼睛,已经没有欲望看了,\\\

初学者谅解哈{:2_32:}
作者: 威威是超人    时间: 2016-9-18 22:44
CreScert 发表于 2016-9-18 20:52
就是啊,刚开始的StringBuffer的对象数组只是申请了空间,你拼接自然报空指针啊。建议在有问题的代码中自己 ...

嗯呢,知道啦,,谢谢你的提议,我会努力嘚
作者: wo1026756529    时间: 2016-9-18 23:41
加点点注释还有心思看,看着就绝望了 st.setName(sc.next());st.setAge(sc.nextInt());
突然想到一个问题:next遇到上一个学生对象的nextInt的/r/n就结束?还是说这样nextLine()才会有这种情况




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2