Я пытаюсь заменить элемент в 2D-списке рука вместо одного элемента по одному указанному индексу меняются все элементы
это список
`private val printS: MutableList<MutableList<Char>> = mutableListOf(mutableListOf())`
Вот как я их пишу
// adding S to the list
for (i in 1..seat) printS[0].add('S')
// now we have list of S char in the printS list
for (i in 1..row) {
printS.add(printS[0])
}
теперь попробуйте изменить элемент списка 5 5
printS[5][5] = 'B'
это результат
1 2 3 4 5 6 7
1 S S S S S B S
2 S S S S S B S
3 S S S S S B S
4 S S S S S B S
5 S S S S S B S
6 S S S S S B S
7 S S S S S B S
все списки изменились не один Мне нужно просто изменить один Char, поэтому результат должен быть
1 2 3 4 5 6 7
1 S S S S S S S
2 S S S S S S S
3 S S S S S S S
4 S S S S S S S
5 S S S S S S S
6 S S S S S B S
7 S S S S S S S
Изменить (на основе разъяснения OP в первом комментарии ниже):
val rows = 7
val cols = 7
val result = MutableList(rows) { MutableList(cols) { 'S' } }
result[5][5] = 'B'
Все еще действует:
Ваш код не работает, потому что внутренний цикл не вложен из-за того, что вы не поставили круглые скобки во внешний цикл:
for (i in 1..seat) printS[0].add('S')
for (i in 1..row) {
printS.add(printS[0])
}
Это означает – правильно отформатировано – не что иное, как:
for (i in 1..seat) {
printS[0].add('S')
}
for (i in 1..row) {
printS.add(printS[0])
}
Устаревший:
Это должно работать:
val rows = 7
val cols = 7
val result: MutableList<MutableList<Char>> = mutableListOf()
for (row in 0 until rows) {
result.add(mutableListOf())
for (col in 0 until rows) {
result[row].add(if (row = 5 && col == 5) 'B' else 'S')
}
}
result.forEach(::println)
Выход:
[S, S, S, S, S, S, S]
[S, S, S, S, S, S, S]
[S, S, S, S, S, S, S]
[S, S, S, S, S, S, S]
[S, S, S, S, S, S, S]
[S, S, S, S, S, B, S]
[S, S, S, S, S, S, S]
Но более короткий способ создать эту матрицу:
val result = List(rows) { row ->
List(cols) { col ->
if (row == 5 && col == 5) 'B' else 'S'
}
}
спасибо за вашу помощь, я сделал свой вопрос немного плохим, поэтому результат, который я ищу, - это просто изменить один единственный символ в 2-м списке. У меня есть программа зациклена, поэтому вы можете выбрать много мест и в любое время, когда вы выбрали одно буква «S» будет заменена буквой «B» и будет напечатана в первый раз, когда все принтеры получают список «S», поэтому я должен настроить список после первой печати, когда выбрано первое место, он будет печатать с помощью b и список должен измениться для следующей печати
@BigBeastDGX Добавил правку в начало моего ответа, чтобы отразить ваше разъяснение.
Ваш код не работает... попробуйте сначала предоставить рабочий пример на play.kotlinlang.org.