2015-09-04 44 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