Давайте забудем об Telegram API, просто чтобы посмотреть, что происходит с вашей переменной int i
.
Каждый раз, когда вызывается onUpdateReceived()
, int i
объявляется внутри этого метода и инициализируется значением 0
.
Это выглядит так
public class Scope {
public static void main(String[] args) {
System.out.println(getI());
System.out.println(getI());
}
private static int getI() {
int i = 0;
i++;
return i;
}
}
Выход будет
1
1
Чтобы ваша программа работала так, как вы ожидаете, вы должны объявить int i
вне области действия onUpdateReceived()
. Наиболее очевидный способ - создание статической переменной.
public class Scope {
public static void main(String[] args) {
System.out.println(getI());
System.out.println(getI());
System.out.println(getI());
System.out.println(getI());
}
private static int i = 0;
private static int getI() {
i++;
return i;
}
}
Выход будет
1
2
3
4
Итак, теперь ваш код должен выглядеть следующим образом
public class Bot extends TelegramLongPollingBot {
private static int i = 0;
public void onUpdateReceived() {
/*...*/
else if (update.hasMessage() && update.getMessage().hasText() && update.getMessage().getText().equals("1. M")) {
i++;
} else if (update.hasMessage() && update.getMessage().hasText() && update.getMessage().getText().equals("1. end")) {
System.out.println(i);
}
/*...*/
}
public String getBotToken() {
return "...";
}
public String getBotUsername() {
return "...";
}
}