У меня есть сетка 7 на 7, и мне приходится разбирать строку, заполняющую сетку. Поэтому, если у меня есть строка с 49 элементами, мне нужно преобразовать строку в полезную сетку. Сетка представлена с картой, которая выглядит следующим образом:Scala, возвращающая координату как кортеж
Map[(Int, Int), List[Int])]
Вот что я до сих пор:
def parseHelper(str: String, x: Int, y: Int, lst: Map[(Int, Int), List[Int]]): Map[(Int,Int), List[Int]] = {
str match{
case "" => lst
case _ => if (x == 6){
if (str.charAt(0).equals('.')){
parseHelper(str.substring(1), 0, y+1, lst + ((x, y) -> List(-1)))
} else {
print("str = " + str + " int = " + str(0) + " list = " + lst.head + "\n")
parseHelper(str.substring(1), 0, y+1, lst + ((x,y) -> List(str(0))))
}
} else {
if (str.charAt(0).equals('!')){
parseHelper(str.substring(1), x+1, y, lst+((x, y) -> List(-1)))
} else {
print("str = " + str + " int = " + str(0) + " list = " + lst.head + "\n")
parseHelper(str.substring(1), x+1, y, lst+((x,y) -> List(str(0))))
}
}
}
}
!
представляет собой пустое место, поэтому мы помещаем -1
представить, что.
Пример Строка: !!!!8!3!!!6!!7!!84!3!5!!2!9!!!1!54!8!!!!!!!!!4!27!6!!!3!1!!7!4!72!!4!!6!!!4!1!!!3
Печатающие заявления у меня есть для отладки. Проблема в том, что когда я ввожу int, который не равен -1, вводится число, которое никогда не было в строке. Ниже у меня есть выход:
str = 8.3...6..7..84.3.5..2.9...1.54.8.........4.27.6...3.1..7.4.72..4..6...4.1...3 int = 8 list = ((0,0),List(-1))
str = 3...6..7..84.3.5..2.9...1.54.8.........4.27.6...3.1..7.4.72..4..6...4.1...3 int = 3 list = ((5,0),List(-1))
str = 6..7..84.3.5..2.9...1.54.8.........4.27.6...3.1..7.4.72..4..6...4.1...3 int = 6 list = ((5,0),List(-1))
str = 7..84.3.5..2.9...1.54.8.........4.27.6...3.1..7.4.72..4..6...4.1...3 int = 7 list = ((5,0),List(-1))
str = 84.3.5..2.9...1.54.8.........4.27.6...3.1..7.4.72..4..6...4.1...3 int = 8 list = ((5,0),List(-1))
str = 4.3.5..2.9...1.54.8.........4.27.6...3.1..7.4.72..4..6...4.1...3 int = 4 list = ((7,1),List(56))
str = 3.5..2.9...1.54.8.........4.27.6...3.1..7.4.72..4..6...4.1...3 int = 3 list = ((7,1),List(56))
str = 5..2.9...1.54.8.........4.27.6...3.1..7.4.72..4..6...4.1...3 int = 5 list = ((7,1),List(56))
str = 2.9...1.54.8.........4.27.6...3.1..7.4.72..4..6...4.1...3 int = 2 list = ((7,1),List(56))
str = 9...1.54.8.........4.27.6...3.1..7.4.72..4..6...4.1...3 int = 9 list = ((7,1),List(56))
str = 1.54.8.........4.27.6...3.1..7.4.72..4..6...4.1...3 int = 1 list = ((7,1),List(56))
str = 54.8.........4.27.6...3.1..7.4.72..4..6...4.1...3 int = 5 list = ((7,1),List(56))
str = 4.8.........4.27.6...3.1..7.4.72..4..6...4.1...3 int = 4 list = ((7,1),List(56))
str = 8.........4.27.6...3.1..7.4.72..4..6...4.1...3 int = 8 list = ((7,1),List(56))
str = 4.27.6...3.1..7.4.72..4..6...4.1...3 int = 4 list = ((7,1),List(56))
str = 27.6...3.1..7.4.72..4..6...4.1...3 int = 2 list = ((7,1),List(56))
str = 7.6...3.1..7.4.72..4..6...4.1...3 int = 7 list = ((7,1),List(56))
str = 6...3.1..7.4.72..4..6...4.1...3 int = 6 list = ((7,1),List(56))
str = 3.1..7.4.72..4..6...4.1...3 int = 3 list = ((7,1),List(56))
str = 1..7.4.72..4..6...4.1...3 int = 1 list = ((7,1),List(56))
str = 7.4.72..4..6...4.1...3 int = 7 list = ((7,1),List(56))
str = 4.72..4..6...4.1...3 int = 4 list = ((7,1),List(56))
str = 72..4..6...4.1...3 int = 7 list = ((7,1),List(56))
str = 2..4..6...4.1...3 int = 2 list = ((7,1),List(56))
str = 4..6...4.1...3 int = 4 list = ((7,1),List(56))
str = 6...4.1...3 int = 6 list = ((7,1),List(56))
str = 4.1...3 int = 4 list = ((7,1),List(56))
str = 1...3 int = 1 list = ((7,1),List(56))
str = 3 int = 3 list = ((7,1),List(56))
По какой-то причине число 56
вводится в отображении, когда 56 даже не в строке.
Спасибо за помощь!
'str (0)' возвращает первый символ строки. 56 - код ASCII для символа '8' – Dima