Странный java.lang.ArrayIndexOutOfBoundsException: -1

1

У меня есть эта строка кода:

    if (gram.getVN().get(i) != gram.getAxiom() && 
lr1.getAutoma()[j][lr1.getColumn().indexOf(gram.getVN().get(i))].size() != 0) {
 //some actions

}

и он отлично работает. Но если я это сделаю:

System.out.println(lr1.getAutoma()[j][lr1.getColumn().indexOf(gram.getVN().get(i))].size());

        if (gram.getVN().get(i) != gram.getAxiom() && 
    lr1.getAutoma()[j][lr1.getColumn().indexOf(gram.getVN().get(i))].size() != 0) {
     //some actions

}

то я получаю это исключение, и я не могу понять, почему! Может кто-нибудь мне помочь? Спасибо..

  • 1
    Ну где ты взял исключение? И можете ли вы упростить пример? (В этом коде есть огромное количество вещей, о которых мы ничего не делаем.) Обратите внимание, что в вашем первом случае, если первое выражение ( gram.getVN().get(i) != gram.getAxiom() ) имеет значение false , тогда оно не будет оценивать второе выражение - тогда как во втором случае вы печатаете это второе выражение независимо.
  • 0
    Какова ценность j ? Как насчет lr1.getColumn().indexOf(gram.getVN().get(i)) ? Сообщение об ошибке в значительной степени объясняет проблему: вы используете индекс массива -1, который выходит за пределы (поскольку все индексы массива должны быть> = 0). Между прочим, вы можете захотеть рассмотреть временную переменную здесь и там - вставка всего может затруднить чтение.
Теги:
exception

1 ответ

4
Лучший ответ

Просто потому, что lr1.getColumn().indexOf(gram.getVN().get(i)) возвращает -1.

В первом фрагменте эта часть даже не выполняется, потому что && является оператором короткого замыкания, а первое условие (gram.getVN().get(i) != gram.getAxiom()) ложно.

  • 1
    Почти наверняка.
  • 0
    Вы правы. Я вставил больше отпечатков, чтобы увидеть значения первого и второго оператора AND, и я получу результат. Спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню