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:\ Scala> scala HelloWord.scala输入一些 数字并按ctrl-c 1 2 3终止批处理作业(是/否)?
答案 0 :(得分: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
,从String
到Int
的非成功转化转为None
并展平。
另请注意,对象和类是大写的,因此按惯例而不是object sum
我们写object Sum
。
答案 1 :(得分:2)
您还可以使用外部API。我非常喜欢scallop API
答案 2 :(得分: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 。