Одноразовое объявление переменной

157
24 мая 2018, 11:20

В общем, есть код в цикле:

public void onEnable(){
    ..........
    getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable()
    {
    public void run()
    {
        for (int i = 0; i < a.size(); i++) {
            Block b = a.get(i);
            if(b.getWorld().getBlockAt(b.getX(),b.getY(),b.getZ()).getType() == Material.AIR){
                int timer = 1;
                timer++;
                getLogger().info("а интов у нас целых " + timer);
                if(timer >= 20){
                    setbl(b.getWorld(),b.getX(),b.getY(),b.getZ(),0.5);
                    timer = 0;
                }
            }
        }
    }

и в консоли видно, что интов-то у нас всегда 1! В общем, как один раз объявить переменную, чтобы подсчёт на переменных начался?

Answer 1

У вас счетчик создавался на каждой итерации цикла, поэтому всегда был одинаковый, поэтому нужно было просто вынести его вне цикла:

public void run()
{
    int timer = 1;
    for (int i = 0; i < a.size(); i++) {
        Block b = a.get(i);
        if(b.getWorld().getBlockAt(b.getX(),b.getY(),b.getZ()).getType() == Material.AIR){
            timer++;
            getLogger().info("а интов у нас целых " + timer);
            if(timer >= 20){
                // ...
            }
        }
    }
}
Answer 2

Я вынес в поле класса "стартовую" переменную, после чего при создании блока и записании его в массив, записывал в отдельный массив этот int под тем же номером, что и сам блок. В итоге, работает, при чём довольно стабильно.

READ ALSO
Библиотеки криптопро

Библиотеки криптопро

с криптопро я раньше не работалНо сейчас в нашей компании возникла задача реанимировать сервис для подписи файлов

164
Почему для выбора ряда в таблице необходимо двойной клик?

Почему для выбора ряда в таблице необходимо двойной клик?

Всем приветУ меня есть страничка на которой находиться выпадающий список с именами кастомеров

215
Перевод экранных координат в мировые

Перевод экранных координат в мировые

При переводе координат у меня почему то не учитывается матрица View:

160
Java Repository и Facade чем они отличаются?

Java Repository и Facade чем они отличаются?

Вот пишу проект и я совсем запуталсяКогда использовать Repository pattern когда Facade pattern ?Ведь по сути оба скрывают реализацию того или иного метода

153