ArrayList сам переходит в конец

В функции есть циклы:

package com.dmitry.searchgame

import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.widget.TextView
import androidx.core.content.ContextCompat.startActivity

class MainClass (
    private val buttonNext: TextView, var QuestionView: TextView, var AnswerView1: TextView, var AnswerView2: TextView, var AnswerView3: TextView,
    private val questions: ArrayList<String>, private val answers: ArrayList<String>, private val contex: Context) {

    private var nowQuestion = 0
        private var nowAnswer = 0
            private var score = 0

    @SuppressLint("SetTextI18n")
    fun start () {
        QuestionView.text = questions[nowQuestion]
            nowQuestion++
        AnswerView1.text = answers[nowAnswer]
            nowAnswer++
        AnswerView2.text = answers[nowAnswer]
            nowAnswer++
        AnswerView3.text = answers[nowAnswer]
            nowAnswer++

        AnswerView1.setOnClickListener {
                QuestionView.text = "Отлично. Ответ верный."
                    AnswerView1.text = ""
                        AnswerView2.text = ""
                            AnswerView3.text = ""
            AnswerView1.isClickable = false
                AnswerView2.isClickable = false
                    AnswerView3.isClickable = false
            score++
        }
        AnswerView2.setOnClickListener {
                QuestionView.text = "Увы... Ответ не верный. Правильный ответ:  ${answers[nowAnswer - 3]}"
                    AnswerView1.text = ""
                        AnswerView2.text = ""
                            AnswerView3.text = ""
            AnswerView1.isClickable = false
                AnswerView2.isClickable = false
                    AnswerView3.isClickable = false
        }
        AnswerView3.setOnClickListener {
                QuestionView.text = "Увы... Ответ не верный. Правильный ответ:  ${answers[nowAnswer - 3]}"
                    AnswerView1.text = ""
                        AnswerView2.text = ""
                            AnswerView3.text = ""
            AnswerView1.isClickable = false
                AnswerView2.isClickable = false
                    AnswerView3.isClickable = false
        }
    }
    //По идее можно сделать рандом нужно просто игратся с числами а точнее с индексами
    @SuppressLint("SetTextI18n")
    fun main () {
        buttonNext.setOnClickListener {
            while (questions[nowQuestion] != "1") { //добавляем в массив вопросов 0 и все останавливается
                AnswerView1.isClickable = true
                    AnswerView2.isClickable = true
                        AnswerView3.isClickable = true
                QuestionView.text = questions[nowQuestion]
                    nowQuestion++
                AnswerView1.text = answers[nowAnswer]
                    nowAnswer++
                AnswerView2.text = answers[nowAnswer]
                    nowAnswer++
                AnswerView3.text = answers[nowAnswer]
                    nowAnswer++

                AnswerView1.setOnClickListener {
                    QuestionView.text = "Отлично. Ответ верный."
                        AnswerView1.text = ""
                            AnswerView2.text = ""
                                AnswerView3.text = ""
                    AnswerView1.isClickable = false
                        AnswerView2.isClickable = false
                            AnswerView3.isClickable = false
                    score++
                }
                AnswerView2.setOnClickListener {
                    QuestionView.text = "Увы... Ответ не верный. Правильный ответ:  ${answers[nowAnswer -3]}"
                        AnswerView1.text = ""
                            AnswerView2.text = ""
                                AnswerView3.text = ""
                    AnswerView1.isClickable = false
                        AnswerView2.isClickable = false
                            AnswerView3.isClickable = false
                }
                AnswerView3.setOnClickListener {
                    QuestionView.text = "Увы... Ответ не верный. Правильный ответ:  ${answers[nowAnswer - 3]}"
                        AnswerView1.text = ""
                            AnswerView2.text = ""
                                AnswerView3.text = ""
                    AnswerView1.isClickable = false
                        AnswerView2.isClickable = false
                            AnswerView3.isClickable = false
                }
                if (questions[nowQuestion] == "1"){
                    buttonNext.setOnClickListener {
                        val i = Intent(contex, SearchGameFinish::class.java)
                        val b: Bundle? = i.extras
                        nowQuestion = 0
                        nowAnswer = 0
                        startActivity(contex, i, b)
                    }
                }
            }
        }
    }
}

Этот цикл пишет вопросы и ответы, проверяет правильно ли.

И выходит такая ситуация: выводится первый вопрос(фуункция старт) потом я нажимаю buutonNext и почему-то выводится последний вопрос(перед 0)


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

Автор решения: Chin Han

То есть он просто все говорит нажать на все вопросы, и ты спрашиваешь куда он ушел? Я не совсем понял код. Разложи его по частям, и подумай как он проходит. Мне кажется ты в логике накосячил. А еще лучше будет если ты в каждом onClickListener добавишь Log.d("сюда вписываешь название по которому будешь искать","само действие или часть кода") (это логирование, для того чтобы посмотреть как он все это выполняет, если лог не вывелся , то он прошел эту часть.) Log ищешь в logger внизу android-studio

→ Ссылка
Автор решения: Денис Виданов

По нормальному тут должно быть исключение IndexOutOfBoundsException. Вот в этом участке кода:

fun start () {
    QuestionView.text = questions[nowQuestion]
        nowQuestion++

nowQuestion будет равна 1

Далее при нажатии на кнопку buttonNext запускается цикл где:

QuestionView.text = questions[nowQuestion]
                    nowQuestion++ 

nowQuestion еще раз инкрементируется и принимает значение 2 и на момент первого выполнения блока кода:

if (questions[nowQuestion] == "1"){
                    buttonNext.setOnClickListener {
                        val i = Intent(contex, SearchGameFinish::class.java)
                        val b: Bundle? = i.extras
                        nowQuestion = 0
                        nowAnswer = 0
                        startActivity(contex, i, b)
                    }
                }

questions[nowQuestion] == "3" если следовать логике. Дальше цикл будет инкрементировать переменную nowQuestion пока не кончится список и должно вызваться исключение IndexOutOfBoundsException.

Я бы посоветовал пересмотреть весь алгоритм в целом, так как циклы в onClickListener внутри которого переназначается этот самый listener это такое себе.

→ Ссылка