【问题标题】:add user input to a list in Scala将用户输入添加到 Scala 中的列表
【发布时间】:2015-11-21 04:11:51
【问题描述】:
import scala.collection.mutable.MutableList  

var x = false
while (!x) {
val list = MutableList[Any]()
val input = scala.io.StdIn.readLine("input pls:\n")
list += input
if (input == "end"){ x = true ; println("Bye!"); sys.exit}
if (input =="show") {println(list)}

}

所以每当我运行这个程序然后输入“show”来打印列表时,它只会在列表中打印出“show”,但为什么不是我之前所做的其他输入呢?为了将所有输入存储到我的列表(追加)中,直到我输入“显示”或“结束”,我必须更改什么?

【问题讨论】:

    标签: list scala append


    【解决方案1】:

    您需要做的就是将list 变量的初始化上移:

    val list = MutableList[Any]()
    while (!x) {
        // ...
    }
    

    按照您现在的方式,每次循环迭代都会创建一个新列表,因此以前的内容会丢失。

    【讨论】:

      【解决方案2】:

      Ubuntu 15.04 / OpenJDK8 上的 Scala 2.11.7

      我添加了一个名为 .stripLineEnd 的换行符“\n”删除函数,认为这是匹配 ifs 所必需的,但显然这是不必要的,不管有没有都可以正常工作。

      来自Documentation

      def stripLineEnd: 字符串

      去除尾随行结束符 如果有的话,就从这个字符串中提取。

      行结束符是其中之一

      LF - 换行(0x0A 十六进制)

      FF - 换页(0x0C 十六进制)

      如果换行 字符 LF 前面有一个回车 CR(0x0D 十六进制),CR 字符也被剥离(Windows 约定)。

      而且,正如@Mifeet 所说,代码在每个循环中初始化列表,需要将初始化移动到循环之前。

      import scala.collection.mutable.MutableList  
      var x = false
      val list = MutableList[Any]()
      while (!x) {
          val input = scala.io.StdIn.readLine("input pls:\n").stripLineEnd
          list += input
          if (input == "end"){ x = true ; println("Bye!"); sys.exit}
          if (input =="show") {println(list)}
      }
      

      【讨论】:

        猜你喜欢
        • 2021-05-23
        • 2017-08-18
        • 1970-01-01
        • 2016-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        相关资源
        最近更新 更多