如何打印Scala用户定义的数组

时间:2017-08-16 07:12:17

标签: arrays scala

我尝试了以下代码,但在将用户定义的值提供给数组后,它最终会打印5个零。

以下代码采用大小为5的数组并提供用户定义的值

object printarray {    
  def main(args:Array[String]) {
    val arr = new Array[Int](5)

    println("the values of array is ")
    for(i<-0 to 4) {
      val arr = scala.io.StdIn.readInt()
    }

    arr.foreach(println)
  }
}

2 个答案:

答案 0 :(得分:4)

代码中有一些事情需要改进。

您在arr方法的范围内分配了一个名为main的5个元素的数组,但您还要在for comprehension中声明一个具有相同名称arr的附加值范围并在其中读取Int,一旦退出for范围,您将丢弃该范围。然后,在外部作用域中打印数组,该作用域根本没有更改。

您需要做的第一件事就是索引数组而不是在内部范围中创建一个名为arr的新值:

object printarray {    
  def main(args:Array[String]) {
    val arr = new Array[Int](5)

    println("the values of array is ")
    for (i <- 0 to 4) {
      arr(i) = scala.io.StdIn.readInt()
    }

    arr.foreach(println)
  }
}

为了进一步改进,您可以使用yield Scala synax使其更加简洁:

val arr = for (i <- 0 to 4) yield StdIn.readInt()

这不会返回Array[Int],而是返回基础类型为IndexedSeq[Int]的{​​{1}}。如果您仍需要Vector[Int],则必须明确调用Array[Int]

toArray

答案 1 :(得分:2)

在for循环中,您将在每次迭代中重新分配变量。您可以将其更改为:

for(i <- 0 to 4) {
  arr(i) = scala.io.StdIn.readInt()
}

作为旁注,不要在循环之前声明arr,而只需执行以下操作:

val arr = for(i <- 0 to 4) yield scala.io.StdIn.readInt()