输出结果空指针异常,Why?

输出结果空指针异常,Why?

package com.imooc.animal;


public class Animal {

private String kind;


public Animal(){

}

public String getKind() {

return kind;

}


public void setKind(String kind) {

this.kind = kind;

}

public void cry(){

System.out.println("动物会叫!");

}

}

=======

package com.imooc.animal;


public class Cat extends Animal {

public Cat(){

}

public void cry(){

System.out.println("Cat类:小猫的叫声:喵喵喵~~~");

}

}

=========

package com.imooc.animal;


public class Dog extends Animal {

public void cry(){

System.out.println("Dog类:小狗的叫声:汪汪汪~~~");

}

}

==========

package com.imooc.animal;


public class Sheep extends Animal {

public void cry(){

System.out.println("Sheep类:小羊的叫声:咩咩咩~~~");

}

}

==========

package com.imooc.animal;


public class Test {


public static void main(String[] args) {

Animal[] arr=new Animal[5];

        Cat one=new Cat();

        Dog two=new Dog();

        Sheep three=new Sheep();

        for(int i=0;i<arr.length;i++){

        int n=(int)(Math.random()*3);

if(n==0){

        arr[i]=one;

        }else if(n==1){

        arr[i]=two;

        }else if(n==2){

        arr[i]=three;

        }

       for(int j=0;j<arr.length;j++){

       arr[j].cry();

       }

        }

}


}

================

sheep类小羊的叫声:咩咩咩~~~

Exception in thread "main" java.lang.NullPointerException

at com.imooc.animal.Test.main(Test.java:17)

ps.而且是运行了一次之后才出现,完全搞不懂求指导,想了很久了,我是不搞懂就不能进行下一次学习的类型。。。

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

你好,主方法中的两个for循环应该为并列结构,而不是嵌套结构,因为还没赋完值呢,就循环输出了所有的内容,肯定是会有空指针异常。祝:学习愉快

ahak 2017-05-14 02:42:51
package com.imooc.animal;

public class Test {

public static void main(String[] args) {
Animal[] arr=new Animal[5];
        Cat one=new Cat();
        Dog two=new Dog();
        Sheep three=new Sheep();
        for(int i=0;i<arr.length;i++){
        int n=(int)(Math.random()*3);
if(n==0){
        arr[i]=one;
        }else if(n==1){
        arr[i]=two;
        }else if(n==2){
        arr[i]=three;
        }
       for(int j=0;j<arr.length;j++){
    	  arr[j].cry();
       }
        }
}

}

这是你的java test类、注意你的数组循环输出,写到数组录入部分了、造成指针异常,同时认为输出这里可以使用更好的方式:

public class TestAnimal {

    public static void main(String[] args) {
        Animal[] arr = new Animal[5];
        for (int i = 0; i < arr.length; i++) {
            int n = (int) (Math.random() * 3);
            if (n == 0) {
                arr[i] = new Cat();
            } else if (n == 1) {
                arr[i] = new Dog();
            } else if (n == 2) {
                arr[i] = new Sheep();
            }

        }
        for (Animal n : arr) {
            n.cry();
        }
    }

}

同时你声明实例化的过程有问题,循环创建新的对象应该放在对象内,而不是创建好了每次调用同一个,假如cat有序号呢?循环调用的一直是你的“Cat one”,那并没有改变堆内的数据指向,希望点采纳!我是来水经验的

  • 提问者 慕姐8987590 #1
    那为什么会造成空指针异常?
    2017-05-14 10:10:22
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师