0

私はこのコードをいじっていましたが、何らかのエラーを発生させずに配列を作成して追加する方法を理解できません。これは、私がそれを機能させるのに最も近いものです。

最初のループ内で配列を作成しようとしましたが、後でプログラムでアクセスする必要があります。

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

4 に答える 4

2

問題は、長さ 0 の配列を作成していることです。つまり、配列に何も入れることができません。次に、インデックス 0 に何かを配置しようとします。

第 2 に、「不明な」サイズの配列はありません。サイズは、配列の作成時に常に認識されます。動的配列が必要な場合は、 anArrayListまたは otherを使用する必要がありますCollection

于 2013-09-25T14:05:46.377 に答える
2

問題は、サイズ 0 に初期化された配列を使用することです - あなたのコード:

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

入力のサイズ(つまりj > 0)に初期化するか、先の入力サイズがわからない場合は動的サイズのリストを使用する必要があります。

于 2013-09-25T14:06:06.803 に答える
2
int j=0;
String infringements [] = new String [j];

サイズ 0 の配列を作成しています...

サイズがわからない場合は、ArrayList などのリストを使用します

于 2013-09-25T14:06:24.920 に答える