В массив записываются только последние данные объекта класса

Пишу программу по продаже билетов в кино. Пользователь покупает билет, в который заносятся данные названия фильма, места и времени начала сеанса. Проданные билеты заносятся в массив архива. По желанию можно вывести все проданные билеты на фильм.

Но в итоговом массиве выводятся только последние данные объекта класса. Почему?

fun main() {
    val film = Film(
        "Матрица",
        8,
        15,
        arrayOf("10", "10.0", "10.00", "10-00", "10 00", "12.10", "12-10", "12 10", "19.20", "19-20", "19 20")
    )
    val tickets = Tickets(0, 0, "")

    loop@ while (true) {

        do {
            println("Выберите ряд (от 1 до ${film.placeRow}):")
            tickets.userRow = readln().toInt()
        } while (tickets.userRow !in 1..film.placeRow)

        do {
            println("Выберите место (от 1 до ${film.placeColumn}):")
            tickets.userColumn = readln().toInt()

/*            if (film.soldTicket.contains(tickets)) {
                println("Место занято, выберите ряд и место заново")
                continue@loop
            }*/
        } while (tickets.userColumn !in 1..film.placeColumn)

        do {
            println("Выберите время 10.00, 12.10, 19.20")
            tickets.userTime = readln()
        } while (!film.time.contains(tickets.userTime))

        film.soldTicket += tickets

        println("Купить еще билет? \n 1. Да \n 2. Нет")
        if (readln() == "2") break

    }
    println(film.soldTicket.contentToString())
}

//class Film
class Film(val name:String, var placeRow: Int, var placeColumn: Int, var time: Array<String>) {

    var soldTicket: Array<Tickets> = arrayOf()

}

//class Tickets
data class Tickets(var userRow: Int, var userColumn: Int, var userTime: String)

Результат: [Tickets(userRow=1, userColumn=1, userTime=10), Tickets(userRow=1, userColumn=1, userTime=10)]


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

Автор решения: Alex Krass

Чтобы хранить разные данные, объекты надо создавать разные, а у вас один и тот же ходит по кругу.

Подробнее объясняется темами про различие ссылочных типов и примитивных типов данных. А так же как они хранятся и передаются. В данном случае у вас просто получился массив, хранящий ссылки на один и тот же объект.

Починить можно так:

loop@ while (true) {
    val tickets = Tickets(0, 0, "")
    ...
→ Ссылка