我和每头猪,牛和马都建立了一个动物养殖场,并拥有自己的名字。
我选择放置动物的阵列的哪个位置,然后键入名称。
但我无法正确打印数组。
怎么做?
这是错误:
Exception in thread "main" java.lang.NullPointerException
at Bondegard.main(Bondegard.java:58)
我只尝试过一种动物,所以其他两种动物还没有完成。
这是我的代码:
import java.util.Scanner;
public class Bondegard
{
static Gris[] grisebinge = new Gris[10];
static Hest[] stall = new Hest[5];
static Ku[] fjos = new Ku[30];
public static void settInnGris(Gris g)
{
Scanner in = new Scanner(System.in);
System.out.println("Hvor vil du sette in grisen? (0-9) ");
int index = in.nextInt();
for(int i=0; i<grisebinge.length; i++)
{
if(grisebinge[index] != null)
{
System.out.println("Plassen er opptatt");
index = in.nextInt();
}
else if(grisebinge[index] == null)
{
System.out.println("Hva heter grisen din?");
Scanner inn = new Scanner(System.in);
String temp = inn.nextLine();
grisebinge[index]=g;
grisebinge[index].setGrisNavn(temp);
break;
}
}
}
static void settInnHest(Hest h) { }
static void settInnKu(Ku k) { }
public static void main(String[]args)
{
Gris g = new Gris();
settInnGris(g);
settInnGris(g);
settInnGris(g);
settInnGris(g);
settInnGris(g);
for(int i=0; i<grisebinge.length; i++)
{
System.out.println(grisebinge[i].getGris());
}
}
}
我的Gris课程是
public class Gris {
private String grisHeter;
public String getGris()
{
return grisHeter;
}
public void setGrisNavn(String m)
{
grisHeter=m;
}
}
答案 0 :(得分:3)
您只需向grisebinge
添加5头猪,因此其余5个元素仍为null
。当您尝试在最后打印他们的姓名时,您试图在getGris()
中的所有10个元素上调用grisebinge
,即使是那些null
的元素。
在null
上调用方法会产生NullPointerException
。
答案 1 :(得分:1)
好吧,如果你想要做的是打印数组的所有元素:
Arrays.toString( array );
请参阅http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html
答案 2 :(得分:1)
您的数组包含null
元素,因此当您尝试在null元素上调用方法getGris()
时,您将获得异常。
尝试从此处更改打印循环:
for(int i=0; i<grisebinge.length; i++)
{
System.out.println(grisebinge[i].getGris());
}
对此:
for(int i=0; i<grisebinge.length; i++)
{
Gris g = grisebinge[i];
if( g!= null)
System.out.println(g.getGris());
}
然而,这只会掩盖你在数组中有空元素的事实(这对于未设置的最后一个元素来说很好),但是看看你在使用Arrays.toString()
打印后做出的另一个注释你有第一个element为null。您应该仔细查看将元素放入数组的逻辑。 (但我现在看到用户可以指定放置它的索引)
答案 3 :(得分:0)
根据我对你提供的代码的理解,你试着说输入你希望添加Gris对象的索引 - System.out.println(“Hvor vil du sette in grisen?(0-9) “);
在主要方法中,你称之为settInnGris(g);五次。所以当你的代码要求System.out.println(“Hvor vil du sette in grisen?(0-9)”)时,我会说1; 后来的案例3,5,2,4
那么在这种情况下发生了什么Gris对象将在数组中添加索引(1,3,5,2,4)位置,因为我输入了这些值,但是在下面的循环中 - for(int i = 0; i
这个循环将迭代到grisebinge.length并且你在你的集合中添加了几个gris(小于你的集合长度并且不确定你要添加的索引位置)对象。 这就是你在主类中获得空指针异常的原因。