Вот код в 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)
}
Теперь вывод правильный.
На самом деле я копирую код из книги , И согласно книге код должен работать нормально.
Пожалуйста, помогите мне понять, почему это происходит, и найдите мою ошибку.