创建一个未知长度的数组

时间:2013-09-25 14:01:54

标签: java arrays indexoutofboundsexception

我一直在弄乱这个代码,并且无法解决如何创建和添加到数组而不会产生某种错误的方式。这是我最接近它的工作方式。

我已尝试在第一个循环中创建数组,但我需要稍后在程序中访问它。

String  userInput;
int i=0; 
String damages [] = new String [i];
double repairCost [] = new double [i];

int j=0;
String infringements [] = new String [j];
double fines [] = new double [j];

double repairCostTotal = 0.00;
double finesTotal = 0.00;
double finalHire = 0.00;  

do
{
    System.out.print("Damage: D, Infringements: F, "Exit: X");
    userInput = stdin.readLine();

    if (userInput.equalsIgnoreCase("D"))
    {

        System.out.println("Damage description:");
        damages[i] = stdin.readLine();  //<<<<--line of error

        System.out.println("Repair Costs:");
        repairCost [i] = Double.parseDouble(stdin.readLine());
        repairCostTotal = repairCostTotal + repairCost [i];
        i=i+1;
    }
    else if (userInput.equalsIgnoreCase("F"))
    {

        System.out.println("Infringement type:");
        infringements[j] = stdin.readLine();

        System.out.println("Fine:");
        fines [j] = Double.parseDouble(stdin.readLine());
        finesTotal = finesTotal + fines [j];
        j=j+1;
     }
    else if (!userInput.equalsIgnoreCase("X"))
    {
        System.out.print("Enter a valid Selection:");
    }
}

while (!userInput.equalsIgnoreCase("x"));


System.out.println("Damage Repair Details: ");

for ( i= 0; i < damages.length; i++)
    System.out.println("- " + damages [i] + " ($" + repairCost[i] + ")");

System.out.printf("Damage Repair Total: %10.2f %n", repairCostTotal);


System.out.println("Traffic Infringement Details:");

for (j= 0; j < fines.length; j++)
    System.out.println("- " + infringements [i] +  " ($" +  fines[j] + ")");

System.out.printf("Traffic Fine Total:  %10.2f %n", finesTotal);

我收到此错误

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at CarHire.main(CarHire.java:106)

我确信这是一个我错过的简单原则,感谢任何帮助。

4 个答案:

答案 0 :(得分:4)

使用Java ArrayList创建动态大小的数组。

查看此documentation

答案 1 :(得分:2)

你的问题是你正在创建一个0长度的数组,这意味着你不能在其中加入任何东西。然后你尝试在索引0处放置一些东西。

其次,没有“未知”大小的数组。在阵列创建时始终知道大小。如果您需要动态数组,则需要使用ArrayList或其他Collection

答案 2 :(得分:2)

问题是您使用初始化为0的数组 - 您的代码:

int j=0;
String infringements [] = new String [j];
double fines [] = new double [j];

您必须将其初始化为输入的大小(即j > 0)或使用具有动态大小的List,以防您不知道前方的输入大小。

答案 3 :(得分:2)

int j=0;
String infringements [] = new String [j];

您正在创建一个大小为0的数组......

如果您不知道大小,请使用ArrayList

等列表