2016-03-28 12 views
1

私は7×7グリッドを持っており、グリッドを塗りつぶす文字列を解析する必要があります。だから私は49要素の文字列がある場合、私は使用可能なグリッドに文字列を変換する必要があります。グリッドは、このようになりますマップで表現されていますタプルとして座標を返すスカラ

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

print文。問題は、-1でないintを入力すると、文字列に決してなかった数値が入力されるということです。私が持っている出力の下にはいくつかの理由

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は文字 '8'のASCIIコードです – Dima

答えて

4

CharのASCIIコードを使用しています。あなたが欲しいのは、数字に変換するためにstr(0).asDigitを使用することです。つまり、あなたはこの方法を複雑にしています。

str.zipWithIndex.map{case (digit, index) => ((index/7, index % 7), digit.asDigit)}.toMap 
関連する問題