在Scala中打印阵列

时间:2018-07-03 12:59:13

标签: scala

我试图将用户输入带到数组并使用Scala打印。但是出了点问题。

def  abc()={
var n:Int=0
var m:Int=0
var i:Int=0
var j:Int=0
    print("Enter The Length Here:") 
    n=scala.io.StdIn.readInt
    var z= new Array[Int](n)
    while(n>i){
        print("Enter The Num :")        
        m=scala.io.StdIn.readInt
        z[i]=m
        i+=1
    }
    for(j <- 0 to n){
        print(z[j])
        j=j+1
    }

} abc()

2 个答案:

答案 0 :(得分:4)

以下是更惯用的Scala中的版本:

def abc() = {
  print("Enter The Length Here:")
  val n: Int = scala.io.StdIn.readInt

  val z = (1 to n).map{ i =>
    print(s"Enter value $i: ")

    scala.io.StdIn.readInt
  }

  z.foreach(print)
}

abc()

不需要varfor

答案 1 :(得分:2)

这是您的代码段的正确版本:

def abc() = {
  var n: Int = 0
  var m: Int = 0
  var i: Int = 0
  var j: Int = 0

  print("Enter The Length Here:")
  n = scala.io.StdIn.readInt
  var z = new Array[Int](n)

  while (n > i) {
    print("Enter The Num :")
    m = scala.io.StdIn.readInt
    z(i) = m
    i += 1
  }
  for (j <- 0 until n) {
    print(z(j))
  }
}

abc()
  1. 使用(index)而不是[index]来按Array中的索引获取元素或分配值。

  2. 使用for (j <- 0 to n)是不正确的,因为您可以使用ArrayIndexOfBoundException而不是untilto,所以for (j <- 0 until n)是正确的。 / p>

  3. 不需要像j = j + 1那样递增,因为您无法重新分配val,并且for将从0遍历到n遍历所有元素。因此您的j将是0, 1 ... n -1