我今天一直在学习Delphi,但遇到一个奇怪的错误:
type
TMatriz = array[1..10,1..10] of Integer;
var
i, j: Integer;
tablaDeMultiplicar: TMatriz;
begin
for i := 1 to 10 do
begin
for j := 1 to 10 do
begin
tablaDeMultiplicar[i-1,j-1] := i*j;
end;
end;
for i := 0 to 9 do
begin
for j := 0 to 9 do
begin
Write(tablaDeMultiplicar[i,j]:6);
end;
Writeln;
end;
Readln;
end.
据我所知,这将显示乘法表。现在,它显示一行1 2 ... 9 0,其余为0。
当我尝试将索引从1和10更改为0和9并一致地调整行时,它什么也没显示。我尝试了另一种方法,但只能以这种方式工作:
我从这里得到的唯一结论是,您不能使用for:/
的vars答案 0 :(得分:5)
您的索引偏离了1。您的tablaDeMultiplicar
被声明为:
TMatriz = array[1..10,1..10] of Integer;
具有索引[1..10, 1..10]
但是您使用索引0..9和0..9进行访问:
for i := 1 to 10 do
begin
for j := 1 to 10 do
begin
tablaDeMultiplicar[i-1,j-1] := i*j; // i-1 and j-1 are 0..9 each
将此更改为:
tablaDeMultiplicar[i,j] := i*j;
也可以更改第二组循环。总而言之:
{$R+}{$Q+}
type
TMatriz = array[1..10, 1..10] of Integer;
var
i, j: Integer;
tablaDeMultiplicar: TMatriz;
begin
for i := 1 to 10 do
begin
for j := 1 to 10 do
begin
tablaDeMultiplicar[i, j] := i * j;
end;
end;
for i := 1 to 10 do
begin
for j := 1 to 10 do
begin
Write(tablaDeMultiplicar[i, j]:6);
end;
Writeln;
end;
Readln;
end.
注意:任何地方都没有1..11
或for 0 to 10 do
。 1
和10
一直如此,因为这就是您声明TMatriz
的方式。
可以编译并按预期工作:
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100
并通过@LURD注意此提示:在开发阶段激活范围和溢出检查。这将很快捕获此类错误。
此外,如果您遇到此类问题,请尝试to debug您的代码。比您想象的要容易。