2013-09-25 3 views
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)

Я уверен, что это простой принцип я пропускаю, любая помощь приветствуется.

+0

Вы можете попробовать ArrayList для динамических массивов. –

+0

ArrayList имеет нечто похожее на имплантацию массива. Он сохраняет значения в массивном массиве и расширяет его длину, когда это необходимо. Или вы можете создать на свой собственный новый массив и скопировать значения на него. –

ответ

1

Проблема заключается в том, что вы используете массивы инициализируются размером 0 - Ваш код:

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

Вы должны инициализировать его размер входа (т.е. j > 0) или использовать List, которые имеют динамический размер в случае вы не знаете размер ввода впереди.

1

Ваша проблема в том, что вы создаете массив длиной 0, то есть вы не можете ничего в нем положить. Затем вы пытаетесь что-то поместить в индекс 0.

Во-вторых, нет массивов «неизвестного» размера. Размер всегда известен во время создания массива. Если вам нужны динамические массивы, вам необходимо использовать ArrayList или другие Collection.

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

Вы создаете массив размером 0 ...

Если вы не знаете размер, использовать список, такие как ArrayList

3

Использование Java ArrayList для создания массивов динамического размера ,

Проверить это documentation

Смежные вопросы