Несколько массивов в цикле for

156
28 апреля 2019, 07:00

Осваиваю массивы и циклы, и столкнулся с проблемой. Есть 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);
    }
  }
}
Answer 1

В этом цикле

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++)

Как-бы других рамок быть не может в Вашем случае

Предлагаю следуещее решение, к Вашему коментарию (даю псевдокод, т.к. С телефона)

  1. Создаем флаг

     boolean b = false;
  2. Применяем в цикле while

     while(!b){
           //логика цикла....
          if (елемент1 < 0)&(елемент2 <0) { 
          b = true;
       }

    }

READ ALSO
Ошибка JNI: cannot open shared object file: No such file or directory

Ошибка JNI: cannot open shared object file: No such file or directory

Есть приложение, которое работает на двух нодахЗапускаю его на каждой ноде таким скриптом:

160
Как сделать сглаживание шрифта?

Как сделать сглаживание шрифта?

В Гугле нашел свойство -webkit-font-smoothing, которое работает пока лишь в Сафари и Хроме(у меня оно вообще не работает)Также видел, что можно добавить...

142