2015-09-04 24 views
1
import scala.io._  

    object Sum {  
    def main(args :Array[String]):Unit = {  

     println("Enter some numbers and press ctrl-c") 

    val input = Source.fromInputStream(System.in) 

    val lines = input.getLines.toList 

    println("Sum "+sum(lines)) 

    } 

    def toInt(in:String):Option[Int] = 

     try{ 

     Some(Integer.parseInt(in.trim)) 

     } 

     catch { 
     case e: NumberFormatException => None  
    } 

    def sum(in :Seq[String]) = { 

    val ints = in.flatMap(s=>toInt(s)) 

     ints.foldLeft(0) ((a,b) => a +b) 

    } } 

我想通過輸入後運行這個節目,我有按 CTRL + C,但如何通過階命令行輸入傳遞

它給出了這樣的消息,E:\斯卡拉>斯卡拉HelloWord.scala輸入一些 數字,然後按ctrl-c 1 2 3終止批處理作業(是/否)?

回答

2

另外的觀察,請注意trait App使執行的對象,因此,不必聲明一個main(...)功能,例如像這樣,

object Sum extends App { 
    import scala.io._ 
    import scala.util._ 

    val nums = Source.stdin.getLines.flatMap(v => Try(v.toInt).toOption) 
    println(s"Sum: ${nums.sum}") 
} 

使用Try,從StringInt非成功的轉換被接通到None並展平。

另請注意,對象和類都是大寫字母,因此按照約定代替object sum,我們編寫object Sum

+0

@ elm-在我運行您發送的代碼時不會打印任何內容 – user1668782

1

試試這段代碼。它應該按預期工作。

object Sum { 
    def main(args: Array[String]) { 
     val lines = io.Source.stdin.getLines 
     val numbers = lines.map(_.toInt) 
     println(s"Sum: ${numbers.sum}") 
    } 
} 

此外,正確的快捷方式,結束輸入流是按Ctrl + d

+0

感謝它的工作。我在Windows 7中使用所以輸入流Ctrl + C正在工作 – user1668782

+0

- 接受你的答案。感謝您的幫助 – user1668782

相關問題