我想在Scala中打印一个二维矩阵,并且我一直从界限中获得数组索引。我已经使用了可损坏的代码,但我仍然遇到问题。
package com.edureka.scala
import scala.util.control.Breaks._
class Pascal
{
val r,c=0
val matrix=Array.ofDim[Int](r,c) //declare a two-dimensional array
def fun
{
breakable
{
for(r <- 0 until 4 ;c <- 0 until 4)
{
println(matrix(r)(c)=r+c)
if(r>3)break
}
}
}
}
object pas1 extends App
{
val pasobj=new Pascal()
pasobj.fun
}
您正在创建一个空数组:
val matrix = Array.ofDim[Int](0, 0)
matrix: Array[Array[Int]] = Array()
由于没有条目,因此检索一个失败:
scala> matrix(0)(0)
java.lang.ArrayIndexOutOfBoundsException: 0
也分配给一个失败:
scala> matrix(0)(0) = 0
java.lang.ArrayIndexOutOfBoundsException: 0
您需要声明4x4维数的数组:
val matrix = Array.ofDim[Int](4, 4)
matrix: Array[Array[Int]] = Array(Array(0, 0, 0, 0), Array(0, 0, 0, 0), ...)
然后您可以成功分配:
scala> matrix(3)(3) = 3
也可以检索:
scala> matrix(3)(3)
res1: Int = 3
您定义 empty ints数组,因为您声明 r,c=0
@ val m = Array.ofDim[Int](0, 0)
m: Array[Array[Int]] = Array()
然后在循环中您尝试访问该数组中的元素(不存在(
@ m(0)(0)
java.lang.ArrayIndexOutOfBoundsException: 0
$sess.cmd5$.<init>(cmd5.sc:1)
$sess.cmd5$.<clinit>(cmd5.sc:-1)
简单地创建数组数组不会填充值,尤其是当您将其尺寸设置为0
时。您可以将尺寸设置得更高,并且将有一个填充的数组:
@ val m2 = Array.ofDim[Int](5, 5)
m2: Array[Array[Int]] = Array(
Array(0, 0, 0, 0, 0),
Array(0, 0, 0, 0, 0),
Array(0, 0, 0, 0, 0),
Array(0, 0, 0, 0, 0),
Array(0, 0, 0, 0, 0)
)
@ m2(1)(4)
res7: Int = 0