如何从数组中打印出对象?

时间:2014-09-30 20:34:06

标签: java arrays class object

我和每头猪,牛和马都建立了一个动物养殖场,并拥有自己的名字。

我选择放置动物的阵列的哪个位置,然后键入名称。

但我无法正确打印数组。

怎么做?

这是错误:

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;
     }

}

4 个答案:

答案 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(小于你的集合长度并且不确定你要添加的索引位置)对象。 这就是你在主类中获得空指针异常的原因。