阵列索引出于界限异常-Scala



我想在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

最新更新