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查看nomain
method。如何运行这些方法?它们属于哪个类?main方法只调用getAnimals()方法。后跟system ExitdTo,用于比较更改。同上,用于比较更改。