Java 对象数组的问题

Java 对象数组的问题,java,arrays,arraylist,nullpointerexception,Java,Arrays,Arraylist,Nullpointerexception,我正在学习java,并尝试了一些东西。这就是我想做的 我试图创建一个对象数组的表。 e、 我正在创建一个名为animal的对象,我可以根据用户的选择添加任意数量的动物及其品种 package tt; import java.util.Scanner; public class animal { String aname; String abreed; public animal() { mainprog aa = new mainprog();

我正在学习java,并尝试了一些东西。这就是我想做的

我试图创建一个对象数组的表。 e、 我正在创建一个名为animal的对象,我可以根据用户的选择添加任意数量的动物及其品种

package tt;

import java.util.Scanner;

public class animal {

    String aname;
    String abreed;

    public animal() {

        mainprog aa = new mainprog();

        System.out.printf("eneter name of your %s..\n", aa.Animalcat);
        Scanner name = new Scanner(System.in);
        aname = name.nextLine();

        System.out.printf("eneter breed of your %s..\n", aa.Animalcat);
        Scanner breed = new Scanner(System.in);
        abreed = breed.nextLine();

    }

    public String getbreed() {
        return abreed;

    }

    public String getname() {
        return aname;
    }
}
所以主程序要求我添加多少动物

package tt;

import java.util.Scanner;

public class mainprog {

    public static String Animalcat;

    public static void main(String[] args) {

        System.out.println("How many animals you want to add..");

        Scanner an = new Scanner(System.in);

        int animalNumbers = an.nextInt();

        animal[][] addAnimal = new animal[animalNumbers][1];
        animaltype[] at = new animaltype[animalNumbers];

        for (int i = 0; i < animalNumbers; i++) {

            at[i] = new animaltype();
            Animalcat = at[i].getAnimalType();

            for (int j = 0; j < 1; j++) {

                addAnimal[i][j] = new animal();
            }
        }

        Display(addAnimal, at);

    }

    public static void Display(animal x[][], animaltype y[]) {
        System.out.println("Your animals are..");
        for (int m = 0; m < x.length; m++) {
            System.out.printf("Following are the name and the breed of %s ",
                    y[m].getAnimalType());
            System.out.println();
            for (int n = 0; n < x[m].length; n++) {

                System.out.printf(" %s", x[m][n].aname);
                System.out.printf(" %s", x[m][n].abreed);
                System.out.println();

            }
        }
    }

}
我在这里遇到的问题是,我可以要求添加多少种动物,但我无法控制要添加多少种动物。 在添加动物时,我只能通过声明为[1]手动添加1个动物,而不能通过用户输入

addAnimal = new animal[animalNumbers][1];
问题在于我是否可以通过声明
animal[][]addAnimal=null来实现这一点然后使用类似的方法初始化它:

animal[][] addAnimal = new animal[animalNumbers][animaltypenumbers];

但我总是得到
NullPointerException
。是否还有其他方法可以完成此操作?

创建数组时,它将由它包含的元素的默认值填充。由于
Animal
是一个
对象
,因此它将由
null
值填充,并且不能使用任何具有
null
值的变量。因为您只是在当前代码中填充
animal[i][0]
,所以不会有任何问题。但当您尝试访问
动物[i][1]
时,它会出现。这发生在
Display
方法中:

public static void Display(animal x[][], animaltype y[]) {
    System.out.println("Your animals are..");
    for (int m = 0; m < x.length; m++) {
        System.out.printf("Following are the name and the breed of %s ",
                y[m].getAnimalType());
        System.out.println();
        for (int n = 0; n < x[m].length; n++) {
            //you only filled elements in x[m][0]
            //x[m][n] when n > 0 is null
            //so you will get NullPointerException
            System.out.printf(" %s", x[m][n].aname);
            System.out.printf(" %s", x[m][n].abreed);
            System.out.println();

        }
    }
}
更好的选择:

使用由
ArrayList
支持的
List
,而不是
Animal[]
<代码>列表
让我们来处理动态增长的元素列表

public static void main(String[] args) {
    System.out.println("How many animals you want to add..");
    Scanner an = new Scanner(System.in);
    int animalNumbers = an.nextInt();
    List<Animal> animals = new ArrayList<Animal>();
    for (int i = 0; i < animalNumbers; i++) {
        Animalcat = new animaltype();
        animals.add(Animalcat);
    }
    Display(animals);
}
//modify Display method accordingly
publicstaticvoidmain(字符串[]args){
System.out.println(“要添加多少动物…”);
扫描仪an=新的扫描仪(System.in);
int animalNumbers=an.nextInt();
列出动物=新建ArrayList();
对于(int i=0;i
AnimalTypeNumber的值是多少?价值从何而来?非常感谢您提供的信息。但我需要一个数组的数组,因为我的对象像addAnimal={{dogs},{cat},{lions},{tigers};我想我肯定需要一组array@user3109806如果这篇文章对您有所帮助,请不要忘记。@user3109806若要在注释中发布代码,请使用`character:
像这样将其括起来。
@user3109806多么奇怪的设计啊。不管怎样,如果你喜欢这样,那就继续吧!我的爪哇很烂。。我正在youtube上拍摄视频教程。我学习java做得对吗?告诉我开始学习java的最好方法,也许你们可以给我指一些好书。。
public static void main(String[] args) {
    System.out.println("How many animals you want to add..");
    Scanner an = new Scanner(System.in);
    int animalNumbers = an.nextInt();
    animal[] addAnimal = new animal[animalNumbers];
    animaltype[] at = new animaltype[animalNumbers];
    for (int i = 0; i < animalNumbers; i++) {
        //at[i] = new animaltype();
        //Animalcat = at[i].getAnimalType();
        Animalcat = new animaltype();
        //for (int j = 0; j < 1; j++) {
        //    addAnimal[i][j] = new animal();
        //}
        addAnimal[i] = Animalcat;
    }
    Display(addAnimal, at);
}
//modify Display method accordingly
public static void main(String[] args) {
    System.out.println("How many animals you want to add..");
    Scanner an = new Scanner(System.in);
    int animalNumbers = an.nextInt();
    List<Animal> animals = new ArrayList<Animal>();
    for (int i = 0; i < animalNumbers; i++) {
        Animalcat = new animaltype();
        animals.add(Animalcat);
    }
    Display(animals);
}
//modify Display method accordingly