2016-03-28 3 views
1

У меня есть сетка 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 даже не в строке.

Спасибо за помощь!

+1

'str (0)' возвращает первый символ строки. 56 - код ASCII для символа '8' – Dima

ответ

4

Вы используете код ASCII для Char. Вы хотите использовать str(0).asDigit, чтобы преобразовать его в цифру. Сказав это, вы делаете это слишком сложно. Вы можете получить что-то вроде:

str.zipWithIndex.map{case (digit, index) => ((index/7, index % 7), digit.asDigit)}.toMap 
Смежные вопросы