Выдаёт ошибку java: local variable hpm is accessed from within inner class; needs to be declared final

В этом коде выдаёт данную ошибку : Error:(81, 25) java: local variable hpm is accessed from within inner class; needs to be declared final Error:(82, 104) java: local variable hpm is accessed from within inner class; needs to be declared final Прогуглил и ничего не понял толком как мне эту ошибку устранить и что она обозначает, точнее примерно понимаю но не понимаю. Хелп

package sample;

import javafx.event.ActionEvent;
import javafx.event.EventHandler;

import java.awt.*;

public class Boi {

    Controller controller = new Controller();

    public void perviHod(){
        int a = (int) (1 + Math.random()*2);
        System.out.println(a);
        batl(100, 5, 5, 10, 20, 50, 10, 17,
                1000, 20, 20, 10, 20, 50, 10, 17
                );
    }

    public void batl(int hpi,
                     int shdefi,
                     int shykli,
                     final int shkriti,
                     final int minkriti,
                     final int maxkriti,
                     final int minYroni,
                     final int maxYroni,

                     int hpm,
                     final int shdefm,
                     final int shyklm,
                     int shkritm,
                     int minkritm,
                     int maxkritm,
                     int minYronm,
                     int maxYronm
    ){

        while(hpi>=0||hpm>=0){

            controller.to.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {

                    int block;
                    int ykl = -1;
                    int krit;
                    int itogattack;

                    block = (int) (1 + Math.random() * 100);
                    if(block <= shdefm){
                        block = 1000;
                    }else{
                        block = -1;
                        ykl = (int) (1 + Math.random() * 100);
                        if(ykl <= shyklm){
                            ykl = 1000;
                        }else{
                            ykl = -1;
                        }
                    }

                    krit = (int) (1 + Math.random() * 100);
                    if(krit <= shkriti){
                        krit = 1000;
                    }else{
                        krit = -1;
                    }

                    itogattack = (int) (minYroni + Math.random() * maxYroni);

                    if(krit == 1000){
                        itogattack+=((itogattack/100)*((int) (minkriti + Math.random() * maxkriti)));
                    }

                    if(block == 1000){
                        System.out.println("Цель заблокировала удар");
                    }else if(ykl == 1000){
                        System.out.println("Цель уклонилась");
                    }else{
                        hpm -= itogattack;
                        System.out.println("Вы нанесли "+ itogattack + " Урона. У цели осталось хп : "+hpm);
                    }



                }
            });

        }

    }

}

Ответы (1 шт):

Автор решения: Muphlon

Без нумерации строк кода немного сложно,но если просто прочитать ошибку, то выходит: Локальная переменная hpm запросила доступ изнутри внутреннего класса. У переменной должен быть модификатор final (Перевод не точный). Т.e, как я понимаю,локальная переменная пытается получить что-то без нужного модификатора доступа.

Так что попробуй:

  1. Поставить уже этой несчастной переменной final (final int hmp)
  2. Сделать все переменные глобальными и тогда ошибки быть не должно (не самый лучший вариант)

А вообще могу порекомендовать не называть переменные и т.д. транслитом и оставлять комментарии для себя и других.

→ Ссылка