我在一行上有以下输入:
例如
3 1 2 3
或
5 10 20 30 40 50
3
和5
是元素的数量。
我想在Scala中读到这个(首先是元素的数量,然后是元素)。
我尝试过这样的事情:
val n = readInt
val a = readLine.split(" ").map(_.toInt)
但是,这并没有正确读取n
。
那么阅读本文的最佳方式是什么?
答案 0 :(得分:3)
您可以使用split(" ")
和splitAt(1)
的组合来创建包含第一个元素和其余元素的元组:
scala> val s = "3 1 2 3"
s: String = 3 1 2 3
scala> val (Array(nb), rest) = s.split(" ").map(_.toInt).splitAt(1)
nb: Int = 3
rest: Array[Int] = Array(1, 2, 3)
(显然,在您的情况下,您会将s
替换为readLine
。
答案 1 :(得分:2)
readLine
。尝试使用scala.io.StdIn.readLine
之类的
val a = scala.io.StdIn.readLine().split(" ").tail.map(_.toInt)
如果用户输入3 10 20 30
,则a: Array[Int] = Array(10, 20, 30)
答案 2 :(得分:1)
这可能吗?
val a = readLine.split(" ").tail.map(_.toInt)
val n = a.length
答案 3 :(得分:1)
另一种使用List
的解决方案,它有一个方便的提取器。
@ val s = "3 1 2 3"
s: String = "3 1 2 3"
@ val nb :: rest = s.split(" ").map(_.toInt).toList
nb: Int = 3
rest: List[Int] = List(1, 2, 3)
答案 4 :(得分:1)
另一种从val in = "3 1 2 3"
中的集合中提取值到元素的头部和其余部分的方法,如下所示,
val Array(n, xs @_*) = in.split("\\W+").map(_.toInt)
提供
n: Int = 3
xs: Seq[Int] = Vector(1, 2, 3)
在这里,我们按字母数字值进行拆分,将其转换为Int
值,并从标有n
的其余部分中提取头xs
。