У меня есть эта строка кода:
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
}
то я получаю это исключение, и я не могу понять, почему! Может кто-нибудь мне помочь? Спасибо..
Просто потому, что lr1.getColumn().indexOf(gram.getVN().get(i))
возвращает -1.
В первом фрагменте эта часть даже не выполняется, потому что &&
является оператором короткого замыкания, а первое условие (gram.getVN().get(i) != gram.getAxiom()
) ложно.
gram.getVN().get(i) != gram.getAxiom()
) имеет значениеfalse
, тогда оно не будет оценивать второе выражение - тогда как во втором случае вы печатаете это второе выражение независимо.j
? Как насчетlr1.getColumn().indexOf(gram.getVN().get(i))
? Сообщение об ошибке в значительной степени объясняет проблему: вы используете индекс массива -1, который выходит за пределы (поскольку все индексы массива должны быть> = 0). Между прочим, вы можете захотеть рассмотреть временную переменную здесь и там - вставка всего может затруднить чтение.