Java 将数组传递给数组会产生空值,我做错了什么?

Java 将数组传递给数组会产生空值,我做错了什么?,java,Java,因此,我试图编写一些代码,在这些代码中,我基本上需要在每次通过循环时将一个数组扩展一次。是的,我知道数组的大小是固定的,每次我都需要一个新的数组。我也知道,如果我使用列表而不是数组,我不会有任何问题,但是我被迫使用数组 我的代码是这样的: public static void getAnimals() { String animalName[] = new String[1]; int animalNumber[] = new int[1];

因此,我试图编写一些代码,在这些代码中,我基本上需要在每次通过循环时将一个数组扩展一次。是的,我知道数组的大小是固定的,每次我都需要一个新的数组。我也知道,如果我使用列表而不是数组,我不会有任何问题,但是我被迫使用数组

我的代码是这样的:

  public static void getAnimals()
    {
        String animalName[] = new String[1];
        int animalNumber[] = new int[1];
        int lengthOfAnimals;

        animalName[0] = "Null";
        animalNumber[0] = 0;

        while (!animalName[animalName.length - 1].equals("EXTERMINATE"))
        {


            animalName[animalName.length - 1] = JOptionPane.showInputDialog("Name an animal?");
            String numLeft = JOptionPane.showInputDialog("How many are left?");
            animalNumber[animalNumber.length - 1] = Integer.parseInt(numLeft);

            if (animalName[animalName.length - 1].equals("EXTERMINATE"))
            {
                break;
            }

            else
            {

                System.out.println(animalName[animalName.length - 1]);
                animalName = expandName(animalName);
                animalNumber = expandNumber(animalNumber);

            }               
        }




    }

    public static String[] expandName(String animalName[])
    {

        String animalNameExpanded[] = new String[animalName.length + 1];

        for (int a = 0; a <= animalName.length - 1; a++)
        {
            animalNameExpanded[a] =  animalName[a];
        }


        return animalNameExpanded;
    }

    public static int[] expandNumber(int animalNumber[])
    {
        int animalNumberExpanded[] = new int[animalNumber.length + 1];

        for (int a = 0; a <= animalNumber.length - 1; a++)
        {
            animalNumberExpanded[a] =  animalNumber[a];
        }

        return animalNumberExpanded;
    }    
publicstaticvoidgetanimals()
{
字符串animalName[]=新字符串[1];
int animalNumber[]=新int[1];
int lengthOfAnimals;
animalName[0]=“空”;
动物数量[0]=0;
而(!animalName[animalName.length-1].equals(“灭绝”))
{
animalName[animalName.length-1]=JOptionPane.showInputDialog(“命名动物?”);
String numLeft=JOptionPane.showInputDialog(“还剩多少?”);
animalNumber[animalNumber.length-1]=整数.parseInt(numLeft);
if(animalName[animalName.length-1].equals(“灭绝”))
{
打破
}
其他的
{
System.out.println(animalName[animalName.length-1]);
animalName=expandName(animalName);
animalNumber=expandNumber(animalNumber);
}               
}
}
公共静态字符串[]expandName(字符串animalName[])
{
字符串animalName expanded[]=新字符串[animalName.length+1];
对于(int a=0;a
创建一个新数组,其所有条目均为
null
。然后从旧数组中复制值,填充除最后一个条目外的所有条目,最后一个条目仍为
null

在复制后添加一个
animalName扩展[animalName.length]=“Null”
,以便

while (!animalName[animalName.length - 1].equals("EXTERMINATE"))
在下一轮中不从数组中读取
null

创建一个新数组,其所有条目均为
null
。然后从旧数组中复制值,填充除最后一个条目外的所有条目,最后一个条目仍为
null

在复制后添加一个
animalName扩展[animalName.length]=“Null”
,以便

while (!animalName[animalName.length - 1].equals("EXTERMINATE"))

在下一轮中,不会从数组中读取
null

是@Daniel说的,但这也是该方法的用途。检查文档,了解它如何处理较大/较小的大小

另外,看起来您确实需要一个
动物
对象的数组,而不是不同属性的单独数组

编辑 事实上,Daniel的建议也不是很好的风格。更容易使用空安全比较:


while(!“EXTERMINATE”.equals(animalName[animalName.length-1])
这就是@Daniel所说的,也是该方法的目的。查看文档,了解它如何处理较大/较小的尺寸

另外,看起来您确实需要一个
动物
对象的数组,而不是不同属性的单独数组

编辑 事实上,Daniel的建议也不是很好的风格。更容易使用空安全比较:


while(!“EXTERMINATE”.equals(animalName[animalName.length-1])

我没有看到任何
main
方法。如何运行这些方法?它们属于哪个类?main方法只调用getAnimals()方法。后跟system Exit查看no
main
method。如何运行这些方法?它们属于哪个类?main方法只调用getAnimals()方法。后跟system ExitdTo,用于比较更改。同上,用于比较更改。