2014-12-17 2 views
0

У меня есть программа, которая автоматически подсчитывает, сколько раз нажимались цифры на клавиатуре мобильного телефона, но я получаю странную ошибку, и я не знаю, почему.ArrayIndexOutOfBoundsException при подсчете нажатия клавиш

ошибка:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9 
    at naloga11.main(naloga11.java:23) 

код:

//naredi tipkovnico 

    int max_num = 9; 
    String niz = "ta veseli dan ali maticek se zeni xyzq"; 
    String [] tipkovnica = new String[max_num]; 
    int [] stejvnose = new int[max_num]; 
    tipkovnica[1] = " "; 
    tipkovnica[2] = "abc"; 
    tipkovnica[3] = "def"; 
    tipkovnica[4] = "ghi"; 
    tipkovnica[5] = "jkl"; 
    tipkovnica[6] = "mno"; 
    tipkovnica[7] = "pqrs"; 
    tipkovnica[8] = "tuv"; 
    tipkovnica[9] = "wxyz"; 
+4

Индексы массивов начинаются с 0, а не 1. –

+0

да, но я никогда не использую индекс 0. Я попытался добавить его, но все же дает ту же ошибку. – BorutMatjasic

+0

Затем 'max_num' необходимо изменить на 10 и не использовать индекс 0. Не лучшая практика, но она будет работать. Кроме того, почему бы вам не использовать индекс 0? –

ответ

2

Массивы начинают отсчет с 0, так что в этом случае от 0 до 8.

1

индексы массива начинаются с 0, и ваш max_num имеет значение 9, но tipkovnica[9] действительно является индексом 10, поэтому вы получаете ArrayIndexOutOfBoundsException. Измените индексы к следующему:

tipkovnica[0] = " "; 
tipkovnica[1] = "abc"; 
tipkovnica[2] = "def"; 
tipkovnica[3] = "ghi"; 
tipkovnica[4] = "jkl"; 
tipkovnica[5] = "mno"; 
tipkovnica[6] = "pqrs"; 
tipkovnica[7] = "tuv"; 
tipkovnica[8] = "wxyz";//9th index, same as your max_num value 
0

Java использует массивы нулевой основе. Итак, если размер равен 5, элементы запускаются из индекса [0-4]. Значения вы бы перебирать их следующим образом:

for (int i=0; i<array.length; i++) System.out.println(i); 

Which (для новых ребят) на самом деле является эквивалентом

int i = 0 
while (i < array.length) 
{ 
    System.out.println(i) 
    i = i + 1; 
} 

Но тем не менее, здесь следует некоторым идеям, которые могут помочь вам сделать ваш код похорошела.

// this is a more pretty way to initialize an array. 
// the cute thing, is that you do not even need to specify the capacity. 
// however, the array is still fixed size of course. 
String[] elements = { "element1", "element2", "element3" }; 

// this will not compile (and may be confusing) 
String[] elements; 
elements = { "element1", "element2", "element3" }; 

// if you do it in 2 lines, then you need to add the class of the array. 
String[] elements; 
elements = new String[] { "element1", "element2", "element3" }; 

// but really in 95% of times it is better to use an ArrayList. 
List list = new ArrayList(); 
list.add("element1"); 
list.add("element2"); 
list.add("element3"); 

// however, even better is to add generics. 
List<String> list = new ArrayList<String>(); 

// if you use Java 7 language level settings or higher 
// which probably is the case. 
List<String> list = new ArrayList<>(); 

Дело в том, что это редко когда-либо необходимо жёстко размер массива или коллекции.

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