Kotlin класс работает не так, как ожидалось - PullRequest
0 голосов
/ 28 апреля 2020

Вот код в Kotlin.

file1

fun main() {
    var player = Player("madrigal")
    println(player.name)

    printPlayerStatus(player)
    println(player.name)
}

private fun printPlayerStatus(player: Player) {
    println("${player.name} ")
}

file2

package com.bignerdranch.nyethack

import java.io.File

class Player(
    _name: String,
    var healthPoints: Int = 100,
    var isBlessed: Boolean,
    private val isImmortal: Boolean
) {

    constructor(name: String) : this(name, isBlessed = true, isImmortal = false) {
        if (name.toLowerCase() == "kar") healthPoints = 40
    }



    var name = _name
        get() ="${field.capitalize()} of $hometown"
        private set(value) {
            field = value.trim()
        }


    val hometown: String = selectHometown()

    init {
        require(healthPoints > 0, { "healthPoints must be greater than zero." })
        require(name.isNotBlank(), { "Player must have a name" })
    }

    private fun selectHometown(): String = File("data/towns.txt")
        .readText()
        .split('\n')
        .shuffled()
        .last()


    fun castFireball(numFireballs: Int = 2) =
        println("A glass of Fireball springs into existence. (x$numFireballs)")

    fun formatHealthStatus() =
        when (healthPoints) {
            100 -> "is in excellent condition!"
            in 90..99 -> "has a few scratches."
            in 75..89 -> if (isBlessed) {
                "has some minor wounds, but is healing quite quickly!"
            } else {
                "has some minor wounds."
            }
            in 15..74 -> "looks pretty hurt."
            else -> "is in awful condition!"
        }

    fun auraColor(): String {
        val auraVisible = isBlessed && healthPoints > 50 || isImmortal
        val auraColor = if (auraVisible) "GREEN" else "NONE"
        return auraColor
    }
}

Когда Я запускаю его и получаю результаты:

Madrigal of Boston

Madrigal of Boston

Однако я ожидаю получить результаты без пустой строки посередине. Вот так:

Madrigal of Boston
Madrigal of Boston
Madrigal of Boston

Затем я переписываю функцию printPlayerStatus, как показано ниже:

private fun printPlayerStatus(player: Player) {
    println(player.name)
}

Теперь вывод правильный.

На самом деле я копирую код из книги , И согласно книге код должен работать нормально.

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

1 Ответ

0 голосов
/ 28 апреля 2020

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

...