0

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

我的代码是这样的:

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

现在,当它运行时,get 放入animalName 和animalNumber 的值现在为null。发生了什么事,我该如何解决这个问题。

4

2 回答 2

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

创建一个新数组,其所有条目都是null. 然后,您将旧数组中的值复制过来,填充除最后一个之外的所有条目,它仍然是null.

复制后加一个animalNameExpanded[animalName.length] = "Null";,这样

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

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

于 2012-10-15T20:15:36.987 回答
2

@Daniel 所说的,也是Arrays.copyOf(T[], int)方法的用途。检查文档以了解它如何处理更大/更小的尺寸。

此外,您似乎真的想要一个Animal对象数组,而不是针对不同属性的单独数组。

编辑

实际上,丹尼尔的建议似乎也不是很好的风格。更容易使用 null 安全比较:

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

于 2012-10-15T20:21:55.053 回答