我正在尝试在Scala中构建待办事项列表,而我的addItem函数遇到了麻烦。我希望它能够创建一个字符串数组来存储用户的输入,但是现在,用户输入每次都将被覆盖,而不是保存旧的输入。
def addItem() = {
val input = scala.io.StdIn.readLine()
var list = Array[String](input) :+ input
list.foreach(println)
}
我希望此代码可以打印自编译以来输入的每个用户输入,但是,它只会打印最近的输入2次。
我制作了这个菜单和主要功能,该功能调用了我想使用的功能。
def menu(option: Int): Boolean = {
option match {
case 1 =>
addItem()
true
case 2 =>
println("Enter item to delete")
true
case 3 =>
println("Here is your todo list")
false
case 4 =>
println("selected quit")
false
case _ => // the else case
println("Unrecognized command")
true
}
}
}
每次我按数字1时,我都希望能够将一个项目添加到列表中,并使该项目与以前添加的项目一起存储。到目前为止,我不知道该如何存储多个值。我的目标是能够添加每次要存储的项目,而不会覆盖以前存储的项目。
我应该按1,提示添加一个项目,然后输入该项目并将其存储。如果再次按1,则将再次提示我添加另一个项目,因此当在两个输入之后打印该项目时,两个项目都应打印。
考虑使用简单的递归函数来汇总待办事项数组,如下所示:
def inputToDo(quit: String): Array[String] = {
@scala.annotation.tailrec
def loop(acc: Array[String]): Array[String] =
scala.io.StdIn.readLine match {
case x if x == quit => acc
case x => loop(acc :+ x)
}
loop(Array.empty[String])
}
val toDoList = inputToDo("q")
// grocery
// laundry
// q
// toDoList: Array[String] = Array(grocery, laundry)
您用于“存储”输入的列表在addItem
函数中,这是不正确的。您应该将list
移到外面,初始化为空,然后将新输入追加到函数addItem
中。在当前的实现中,您以本地方式使用list
,每次调用addItem
都会创建一个新的list
。
另外,在您的代码中:
var list = Array[String](input) :+ input
您正在分配一个仅用一项(input
)初始化的数组,然后,您再次将input
追加到该新数组。