2017-09-25 2 views
0

Ich lerne Scala und war Programming in Scala Buch von Martin Odersky. Als ich Beispiel in Kapitel 10 versuchte, produziert es nicht das erwartete Ergebnis. Ich habe versucht, den Code ein bisschen hier und da zu modifizieren, ohne Glück. Kann mir jemand sagen, wo ich falsch liege?Spiral Beispiel aus der Programmierung in Scala scheint nicht zu funktionieren

import Element.elem 

object Spiral { 
    val space = elem(" ") 
    val corner = elem("+") 

    def spiral(nEdges: Int, direction: Int): Element = { 
    if(nEdges == 1) 
     corner 
    else { 
     val sp = spiral(nEdges - 1, (direction + 3) % 4) 
     //println("H: " + sp.height + " W: " + sp.width + " D " + direction) 
     def verticalBar = elem('|', 1, sp.height - 1) //updated based on google errata which was otherwise def verticalBar = elem('|', 1, sp.height) 
     def horizantalBar = elem('-', sp.width, 1) 
     if(direction == 0) 
     (corner beside horizantalBar) above (sp beside space) 
     else if (direction == 1) 
     (sp) beside (corner above verticalBar) //updated based on google errata which was otherwise (sp above space) beside (corner above verticalBar) 
     else if (direction == 2) 
     (space beside sp) above (horizantalBar beside corner) 
     else 
     (verticalBar above corner) beside (sp) //updated based on google errata which was otherwise (verticalBar above corner) beside (space above sp) 
    } 
    } 

    //Not working as expected, need to debug and fix 
    def main (args: Array[String]) { 
    val nSides = args(0).toInt 
    println(spiral(nSides, 0)) 
    } 
} 

Hier wird die bei der Ausführung erwartet mit 14 als Argument

+------------- 
|    
| +---------+ 
| |   | 
| | +-----+ | 
| | |  | | 
| | | +-+ | | 
| | | + | | | 
| | | | | | 
| | +---+ | | 
| |  | | 
| +-------+ | 
|   | 
+-----------+ 

Was ich

+------------- 
| +---------+ 
+0

Was * ist * das erwartete Ergebnis? Was bekommst du? –

+0

Ups vergessen zu zitieren, was nicht funktioniert – Rukmaj

Antwort

0

ich den Code denke ich immer,

def spiral(nEdges: Int, direction: Int): Element = { 
if (nEdges == 1) 
    elem("+") 
else { 
    val sp = spiral(nEdges - 1, (direction + 3) % 4) 
    def verticalBar = elem('|', 1, sp.height) 
    def horizontalBar = elem('-', sp.width, 1) 
    if (direction == 0) 
    (corner beside horizontalBar) above (sp beside space) 
    else if (direction == 1) 
    (sp above space) beside (corner above verticalBar) 
    else if (direction == 2) 
    (space beside sp) above (horizontalBar beside corner) 
    else 
    (verticalBar above corner) beside (space above sp) 
} 
} 

ich sein sollte hab das nicht gemacht, könntest du bitte check k wenn das funktioniert?

+0

Ich habe zuerst diesen Code aus dem Buch versucht, da es nicht funktioniert Post google Suche, wo ich fand, dass Errata den Code aktualisiert. Beide arbeiten momentan nicht. – Rukmaj

Verwandte Themen