2013-09-25 4 views
1

Я очень новичок в java. Я должен сделать программу в школе, но когда я пытаюсь запустить ее, я получаю сообщение об ошибке. ArrayIndex .......: 0 в строке 139, это будет где я поставил два * спереди. Я устал, чтобы найти ошибку. Я работаю над этим целый день. Спасибо!ArrayIndexOutOfBoundsException: 0

PS: Я использую пакет easyIO, если некоторые из вас не могут понять некоторые команды.

Редактировать: Я, наконец, нашел его, и это была небольшая проблема. Но теперь я не могу заставить эту проклятую программу найти то, что я ищу в массиве.

void UtskriftArt() { 
    In Utskrift = new In(); 
    In søkefil = new In("Fugler.txt"); 
    int i= 0; 
    int teller = 0; 
    String[][] ArtArray = new String[teller][4]; 


    for(; i > 0 && !søkefil.endOfFile(); i++){ 
     søkefil.readLine(); 
     teller++; 
     if(søkefil.endOfFile()){ 
     søkefil.close(); 
     } 
    } 
    System.out.print("Hvilken art vil du søke opp og skriv ut obeservasjonsdata for? "); 
    String ArtSøke = Utskrift.inWord().trim(); 
    String Art = " "; 
    System.out.println("\t\t" + Art); 
    for(i = 0; i <= ArtArray.length; i++){ 
     **if(ArtSøke == ArtArray[i][0]){ 
     Art = ArtArray[i][0]; 
     System.out.print(ArtArray[i][1]); 
     System.out.print("\t" + ArtArray[i][2]); 
     System.out.println("\t" + ArtArray[i][3]); 
      } 
+0

2 подсказки: вы не можете сравнить строку с ==, вам нужно выполнить string.equals (otherString). И не используйте специальные символы в именах переменных. – Mirco

+0

Я бы остался с использованием английских имен в программах. Или, по крайней мере, имена, ограниченные набором ASCII ... Поверьте мне. Национальные герои - это всего лишь боль для поддержания. И я не английский ... – ppeterka

+0

Цикл, который начинается следующим образом: 'for (; i> 0 &&! Søkefil.endOfFile(); i ++)' никогда не будет выполняться. Во второй части говорится, что выполнение цикла должно выполняться до тех пор, пока 'i' больше 0 (и мы не достигли конца файла). Тем не менее, 'i' начинается с 0, поэтому условие немедленно сработает. – ajb

ответ

5

Ваш массив объявлен как

int teller = 0; 
String[][] ArtArray = new String[teller][4]; 

Его первое измерение имеет размер 0. Он не имеет каких-либо элементов, так что вы не можете получить доступ к элементу по индексу 0 с

if(ArtSøke == ArtArray[i][0]){ 
        ^i is 0 

Это не произойдет, если вы использовали правильную for петлю

for(i = 0; i < ArtArray.length; i++){ 

Обратите внимание, что условие является только <, а не <=. Если это <=, вы всегда выходите за пределы, так как массивы используют индексы на основе 0.

Вы должны объявить фактический размер вы хотите, чтобы массив иметь

teller = 1; // 1, 2, 3, more? 

на стороне, но серьезно, прочитать How do I compare strings in Java?

+0

Я хочу иметь динамическое число, потому что это программа, которую пользователь будет использовать для регистрации наблюдений. Я исправил много проблем, но я не могу получить эту чертову вещь, чтобы начать с начала файла снова, чтобы поймать все слова. – user2816040

+0

@ user2816040 Я не могу прокомментировать это, так как я не знаю вашего класса 'In' или вашей реальной проблемы. Подумайте о следующем вопросе после определения проблемы. –

0

Если у вас есть массив, первый элемент в массиве обращается индекс 0. Это означает, что массив с 1 элементом будет работать только при обращении к индексу 0, все остальные значения индекса будут вне диапазона.

Если у вас есть массив из нулевых элементов, то доступ к индексу 0 (или при любом другом значении индекса) невозможен.

Как упоминалось Sotirios, new String[tellar][4] выделяет массив из нулевых элементов, каждый из которых представляет собой массив из четырех элементов. Это связано с тем, что int tellar = 0; Поскольку массив имеет нулевые элементы, индекс 0 выходит за пределы диапазона.

1
int teller = 0; 
String[][] ArtArray = new String[teller][4]; 

Это вызывает проблему (хорошо описывается Сотериос Delimanolis' answer).

Вы можете решить проблему путем инициализации AryArray непосредственно перед second for-loop в этом случае teller будет больше, чем 0 после того, как увеличивается на first for-loop.

String[][] ArtArray = new String[teller][4]; 
for(i = 0; i < ArtArray.length; i++) // improvement here too 
Смежные вопросы