异常:Invalid_argument“索引超出范围”

问题描述 投票:0回答:1

我写了以下内容:

type slidingTile = { 
  mutable mat: char array array; 
  mutable row: int; 
  mutable column: int
};;

let a = {
  mat=[|
    [|'1'; '2'; '3'|];
    [|'4'; '5'; '6'|];
    [|'7'; '8'; '9'|]
  |]; 
  row=3;
  column=3
};;

let slide tile i j =
  let copy mat = 
    let mat1 = Array.make_matrix (Array.length mat) (Array.length mat.(0)) mat.(0).(0) in
    for i=0 to Array.length mat do
      for j=0 to Array.length mat.(0) do
        mat1.(i).(j)<- mat.(i).(j)
      done; 
    done; 
    mat1 
  in
  let mat1 = copy tile.mat in
  if (i > Array.length tile.mat) || (j > Array.length tile.mat.(0)) then
    tile
  else if (i = tile.row + 1 && j = tile.column) || 
          (i = tile.row - 1 && j = tile.column) || 
          (i = tile.row && j = tile.column + 1) || 
          (i = tile.row && j = tile.column - 1) then
    (mat1.(i-1).(j-1) <- tile.mat.(tile.row-1).(tile.column-1);
     mat1.(tile.row-1).(tile.column-1) <- tile.mat.(i-1).(j-1);
     tile.mat <- mat1;
     tile.row <- i;
     tile.column <- j;
     tile)
  else 
    tile;;

此代码工作正常,但是当我拨打

slide a 2 2;;
时,我收到消息
Exception: Invalid_argument "index out of bounds"
。我从来没有见过这样的消息。发生什么事了?

arrays ocaml
1个回答
1
投票

此错误表明您访问的数组的索引小于 0 或 >= 数组的大小。即,越界索引。

# let a = Array.make 10 0;;
val a : int array = [|0; 0; 0; 0; 0; 0; 0; 0; 0; 0|]
# a.(-1);;
Exception: Invalid_argument "index out of bounds".
# a.(10);;
Exception: Invalid_argument "index out of bounds".
# a.(4);;
- : int = 0

(如果您需要有关代码的更多帮助,您应该对其进行格式化,使其更具可读性。)

© www.soinside.com 2019 - 2024. All rights reserved.