例外:Invalid_argument "index out of bounds"

Exception: Invalid_argument "index out of bounds"

我写了以下内容:

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"。我从未见过这种消息。发生什么事了?

此错误表明您访问了一个索引小于 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

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