输出结果空指针异常,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.而且是运行了一次之后才出现,完全搞不懂求指导,想了很久了,我是不搞懂就不能进行下一次学习的类型。。。
正在回答
你好,主方法中的两个for循环应该为并列结构,而不是嵌套结构,因为还没赋完值呢,就循环输出了所有的内容,肯定是会有空指针异常。祝:学习愉快
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”,那并没有改变堆内的数据指向,希望点采纳!我是来水经验的
- 参与学习 人
- 提交作业 7317 份
- 解答问题 14452 个
想要入门学编程?多年一直活跃在编程语言排行版前列的Java是一个很好的选择。本路径将从Java基础语法、面向对象、常用工具类三部分,为你开启软件开发的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星