Ошибки в коде. Что нужно исправить, чтобы заработало?
fun main(args: Array<String>) {
val t: String = readLine()!!.toString();
var r = arrayOf<String>(t[0]);
var c: Int = 1;
for(i in t[t.last - 1]){
if(i != r[-1]){
r.add([c, i]);
c = 1;
} else{
c += 1;
}
r.add(c);
}
}
print(r);
Код выводит массив, который если сложить все буквы в нём получится сокращённая строка. После каждой буквы стоит цифра, которая указывает сколько раз оно повторялось.
..\Playground\:16:1: error: expecting a top level declaration
print(r);
^
..\Playground\:16:6: error: expecting a top level declaration
print(r);
^
..\Playground\:16:7: error: expecting a top level declaration
print(r);
^
..\Playground\:16:8: error: expecting a top level declaration
print(r);
^
..\Playground\:3:29: error: type mismatch: inferred type is Char but String was expected
var r = arrayOf<String>(t[0]);
^
..\Playground\:6:14: error: for-loop range must have an 'iterator()' method
for(i in t[t.last - 1]){
^
..\Playground\:6:16: error: type mismatch: inferred type is Char but Int was expected
for(i in t[t.last - 1]){
^
..\Playground\:6:18: error: function invocation 'last()' expected
for(i in t[t.last - 1]){
^
..\Playground\:8:15: error: unresolved reference: add
r.add([c, i]);
^
..\Playground\:8:19: error: unsupported [Collection literals outside of annotations]
r.add([c, i]);
^
..\Playground\:13:7: error: unresolved reference: add
r.add(c);
^
Ответы (1 шт):
Автор решения: Alex_Skvortsov
→ Ссылка
Вам нужен код такого формата:
data class LetterWithNumber(
val letter: Char,
var number: Int = 1
){
override fun toString(): String = "$letter$number"
}
fun main(args: Array<String>) {
val input: String = readLine() ?: return
val list = mutableListOf<LetterWithNumber>()
input.forEach {
if (list.lastOrNull()?.letter == it)
list.last().number++
else list.add(LetterWithNumber(it))
}
var result = ""
list.forEach { result += "$it" }
println(result)
}
Избегайте использования индексов там, где это возможно, Kotlin почти всегда позволяет обойтись без них.
Вывод немного не в том формате, что у Вас, но это легко исправить. Например, так:
var result = "["
list.forEach { result += "${it.letter}, ${it.number}, " }
if (result != "]")
result = result.removeSuffix(", ")
result += "]"
println(result)