我写了以下内容:
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
(如果您需要有关代码的更多帮助,您应该对其进行格式化,使其更具可读性。)