Осваиваю массивы и циклы, и столкнулся с проблемой. Есть 2 массива, с заданными рандомными параметрами. И при цикле из каждого элемента массива al[] должен вычитаться параметр каждого элемента массива en[].atk. + параметр al[].res. Цикл работает, но только в 1 этап, после чего выдает ошибку Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3 at Main.main(Main.java:22). Я понимаю что я сделал не правильное обращение ко 2 массиву, но я не могу понять как именно правильно к нему обратиться.
class Main {
public static void main(String[] args) throws InterruptedException {
Ally[] al = new Ally[3];
al[0] = new Ally("Hero One");
al[1] = new Ally("Hero Two");
al[2] = new Ally("Hero Three");
Enemy[] en = new Enemy[3];
en[0] = new Enemy("Enemy One");
en[1] = new Enemy("Enemy Two");
en[2] = new Enemy("Enemy Three");
System.out.println("Hero check \n");
for (int i=0; i < 3; i++){
System.out.println(al[i].name+ " HP = "+ al[i].hp+" Attack = "+al[i].atk+" Resist = "+al[i].res);
}
System.out.println(" ");
System.out.println("Enemy check \n");
for(int i = 0; i < 3; i++){
System.out.println(en[i].name+ " HP = "+en[i].hp+ " Attack = "+en[i].atk+ " Resist = "+en[i].res);
}
System.out.println(" ");
System.out.println("Battle begin \n");
for (int j = 0; j < al[j].hp; j++){
al[j].hp = al[j].hp - en[j].atk + al[j].res;
System.out.println(al[j].name+ " HP = "+ al[j].hp+" Attack = "+al[j].atk+" Resist = "+al[j].res);
Thread.sleep(1000);
}
}
}
В этом цикле
for (int j = 0; j < al[j].hp; j++){
al[j].hp = al[j].hp - en[j].atk + al[j].res;
System.out.println(al[j].name+ " HP = "+ al[j].hp+" Attack = "+al[j].atk+" Resist = "+al[j].res);
Thread.sleep(1000);
}
al[j] пытается обратиться к ячейке al[al[j].hp], и, что-то мне подсказывает, что значение al[al[j].hp] выходит далеко за рамки значений 0...3. - т.е 40. Вот тут Вы и схватываете ошибку "выход за рамки массива".
Поменяйте на
for (int j = 0; j < 3; j++)
А еще лучше на
for (int j = 0; j < al.length; j++)
Как-бы других рамок быть не может в Вашем случае
Предлагаю следуещее решение, к Вашему коментарию (даю псевдокод, т.к. С телефона)
Создаем флаг
boolean b = false;
Применяем в цикле while
while(!b){
//логика цикла....
if (елемент1 < 0)&(елемент2 <0) {
b = true;
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть приложение, которое работает на двух нодахЗапускаю его на каждой ноде таким скриптом:
В Гугле нашел свойство -webkit-font-smoothing, которое работает пока лишь в Сафари и Хроме(у меня оно вообще не работает)Также видел, что можно добавить...