作者:zongnaxxl240 | 来源:互联网 | 2022-12-02 13:38
我今天一直在学习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:/
1> Rudy Velthui..:
您的指数偏离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的这个提示:在开发阶段激活范围和溢出检查.这将很快发现这些错误.
此外,如果您遇到此类问题,请尝试调试代码.这比你想象的要容易.