List index out of bounds(6) - o que é ?
Boa tarde,
estou efetuando um sorteio randomico e quando eu efetuo o primeiro sorteio otimo e preeche sem problemas, mas quando executo um segundo sorteio ele apresenta o erro
[b:a5465b4b67]LIst Index out of bounds[/b:a5465b4b67]
Gostaria de saber mais sobre o erro para poder sanar...
Abaixo codigo fonte
[b:a5465b4b67]procedure TFrmGrupos.DoisGrupos3;
begin
If (CabecaA.Caption=´´) and (CabecaB.Caption=´´) then
begin
CabecaA.Caption:=ListBox2.Items[0];
Label5.Caption:=ListBox2.Items[1];
Label6.Caption:=ListBox2.Items[2];
Label7.Caption:=ListBox2.Items[3];
CabecaB.Caption:=ListBox2.Items[4];
Label8.Caption:=ListBox2.Items[5];
Label9.Caption:=ListBox2.Items[6];
Label10.Caption:=´------------x-----------´;
end
else
if (CabecaA.Caption<>´´) and (CabecaB.Caption=´´) Then
Begin
Randomize;
TotalLista := ListBox2.Items.Count;
while TotalLista <> 0 do
begin
indiceListaA := Random(Listbox2.Items.Count);
If mCidadeA=Listbox2.Items.Strings[indicelistaA] then
ListBox2.Items.Delete(indiceListaA);
Dec(TotalLista);
end;
Label5.Caption:=ListBox2.Items[0];
Label6.Caption:=ListBox2.Items[1];
Label7.Caption:=ListBox2.Items[2];
CabecaB.Caption:=ListBox2.Items[3];
Label8.Caption:=ListBox2.Items[4];
Label9.Caption:=ListBox2.Items[5];
Label10.Caption:=´------------x-----------´;
end
else
if (CabecaA.Caption<>´´) and (CabecaB.Caption<>´´) Then
Begin
Randomize;
TotalLista := ListBox2.Items.Count;
while TotalLista <> 0 do
begin
indiceListaA:=Random(Listbox2.Items.Count);
If mCidadeA=Listbox2.Items.Strings[indicelistaA] then
begin
ListBox2.Items.Delete(indiceListaA);
end;
If mCidadeB=Listbox2.Items.Strings[indicelistaA] then
begin
ListBox2.Items.Delete(indiceListaA);
end;
Dec(TotalLista);
end;
Label5.Caption:=ListBox2.Items[0];
Label6.Caption:=ListBox2.Items[1];
Label7.Caption:=ListBox2.Items[2];
Label8.Caption:=ListBox2.Items[3];
Label9.Caption:=ListBox2.Items[4];
Label10.Caption:=´------------x-----------´;
[/b:a5465b4b67] end;
end;
Obrigado
Wagner
estou efetuando um sorteio randomico e quando eu efetuo o primeiro sorteio otimo e preeche sem problemas, mas quando executo um segundo sorteio ele apresenta o erro
[b:a5465b4b67]LIst Index out of bounds[/b:a5465b4b67]
Gostaria de saber mais sobre o erro para poder sanar...
Abaixo codigo fonte
[b:a5465b4b67]procedure TFrmGrupos.DoisGrupos3;
begin
If (CabecaA.Caption=´´) and (CabecaB.Caption=´´) then
begin
CabecaA.Caption:=ListBox2.Items[0];
Label5.Caption:=ListBox2.Items[1];
Label6.Caption:=ListBox2.Items[2];
Label7.Caption:=ListBox2.Items[3];
CabecaB.Caption:=ListBox2.Items[4];
Label8.Caption:=ListBox2.Items[5];
Label9.Caption:=ListBox2.Items[6];
Label10.Caption:=´------------x-----------´;
end
else
if (CabecaA.Caption<>´´) and (CabecaB.Caption=´´) Then
Begin
Randomize;
TotalLista := ListBox2.Items.Count;
while TotalLista <> 0 do
begin
indiceListaA := Random(Listbox2.Items.Count);
If mCidadeA=Listbox2.Items.Strings[indicelistaA] then
ListBox2.Items.Delete(indiceListaA);
Dec(TotalLista);
end;
Label5.Caption:=ListBox2.Items[0];
Label6.Caption:=ListBox2.Items[1];
Label7.Caption:=ListBox2.Items[2];
CabecaB.Caption:=ListBox2.Items[3];
Label8.Caption:=ListBox2.Items[4];
Label9.Caption:=ListBox2.Items[5];
Label10.Caption:=´------------x-----------´;
end
else
if (CabecaA.Caption<>´´) and (CabecaB.Caption<>´´) Then
Begin
Randomize;
TotalLista := ListBox2.Items.Count;
while TotalLista <> 0 do
begin
indiceListaA:=Random(Listbox2.Items.Count);
If mCidadeA=Listbox2.Items.Strings[indicelistaA] then
begin
ListBox2.Items.Delete(indiceListaA);
end;
If mCidadeB=Listbox2.Items.Strings[indicelistaA] then
begin
ListBox2.Items.Delete(indiceListaA);
end;
Dec(TotalLista);
end;
Label5.Caption:=ListBox2.Items[0];
Label6.Caption:=ListBox2.Items[1];
Label7.Caption:=ListBox2.Items[2];
Label8.Caption:=ListBox2.Items[3];
Label9.Caption:=ListBox2.Items[4];
Label10.Caption:=´------------x-----------´;
[/b:a5465b4b67] end;
end;
Obrigado
Wagner
Wagnermarrane
Curtidas 0
Respostas
Cebikyn
08/05/2004
O erro ocorre quando você tenta acessar um item que não existe. No título do tópico o erro se refere ao item 6, como a contegem começa do zero (0=primeiro, 1=segundo, etc...), você deve se certificar de que o ListBox tem 7 (sete) items, antes de chamar o item 6 (que corresponde ao sétimo item)
GOSTEI 0
Wagnermarrane
08/05/2004
mas o erro continua acorrendo mesmo me certificando que ha o 6 itens.... gostaria de saber se a como zerar a contagem da variavel que verifica o numero do item.
GOSTEI 0
Cebikyn
08/05/2004
Não há como zerar a ´variável´, pois é vc quem chama o item 6 (que corresponde ao sétimo item da lista, e não sexto):
Label9.Caption:=ListBox2.Items[6];
O ListBox procura o item 6, mas não acha, como ele não acha, ele mostra o erro de ´List Index out of Bounds (6)´ (cuja tradução é: ´Item da lista fora dos limites (6)´, em que o limite é o número de itens na lista)
Note que vc está deletando items (método Delete), talvez a falha do código seja essa (posso estar errado, pois não verifiquei o código detalhadamente)... e como você mesmo disse, o primeiro sorteio sai correto, já o segundo não (alguns items foram deletados pelo Delete).
Label9.Caption:=ListBox2.Items[6];
O ListBox procura o item 6, mas não acha, como ele não acha, ele mostra o erro de ´List Index out of Bounds (6)´ (cuja tradução é: ´Item da lista fora dos limites (6)´, em que o limite é o número de itens na lista)
Note que vc está deletando items (método Delete), talvez a falha do código seja essa (posso estar errado, pois não verifiquei o código detalhadamente)... e como você mesmo disse, o primeiro sorteio sai correto, já o segundo não (alguns items foram deletados pelo Delete).
GOSTEI 0