Boa tarde a todos do GUJ.
Bom pessoal estou com um problema quando tento criar uma árvore, onde cada nó filho vai ter 5 filhos.
Eu sei que esse erro acimaé gerado quando tento acessar uma posição que não existe em meu array.
No entanto, já verifiquei o meu código e não consigo visualizar aonde que estar esse erro.
Segue abaixo a minha classe onde o erro acontece.
[code]void criaNo(No raiz, int nivel, int nivelMaximo)
{
indice = 0;
if (lista.size() > indice)
{
for (int i = 0; i < 5; i++)
{
No filho = new No(lista.get(indice));
indice++;
raiz.filho.add(filho);
if (nivel < nivelMaximo)
{
//System.out.println("Nivel: " + nivelMaximo);
criaNo(raiz.filho.get(indice), nivel, nivelMaximo);
//nivel++;
}
}
}
}[/code]
Alguém consegue me dizer o que tem de errado para gerar tal erro?
O erro completo que aparece é o seguinte:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at java.util.ArrayList.rangeCheck(ArrayList.java:571)
at java.util.ArrayList.get(ArrayList.java:349)
at ArvoreTeste.GetOperacoes.criaNo(GetOperacoes.java:61)
at ArvoreTeste.GetOperacoes.criaArvore(GetOperacoes.java:73)
at ArvoreTeste.GetExecuta.main(GetExecuta.java:74)
Java Result: 1
Onde na linha 61 tem a seguinte parte do código
criaNo(raiz.filho.get(indice), nivel, nivelMaximo);
Desde de já obrigado pela ajuda de todos.
Abaixo estar todo o meu código.
[code]package ArvoreTeste;
import java.util.ArrayList;
public class GetOperacoes
{
ArrayList lista = new ArrayList();
int indice = 0;
No raiz = new No(indice);
public static class No
{
ArrayList<No> filho = new ArrayList<No>();
double valor;
public No(double valor) {
this.valor = valor;
}
}
//Adiciona os valores da minha lista no meu índices
public void criaRaiz()
{
if (lista.size() > indice)
{
raiz.valor = lista.get(indice);
indice++;
}
}
//Calcula a quantidade de níveis máximo que à arvore vai ter
public int nivelMaximo(int tamanhoLista)
{
//Lista com 150 elementos terei que ter 4 níveis
int quantidadeDeNiveis = 0;
for (int i = 1; i < tamanhoLista; i = (int) Math.pow(5, quantidadeDeNiveis))
{
if (tamanhoLista > i)
{
quantidadeDeNiveis++;
}
}
return quantidadeDeNiveis;
}
void criaNo(No raiz, int nivel, int nivelMaximo)
{
indice = 0;
if (lista.size() > indice)
{
for (int i = 0; i < 5; i++)
{
No filho = new No(lista.get(indice));
indice++;
raiz.filho.add(filho);
if (nivel < nivelMaximo)
{
//System.out.println("Nivel: " + nivelMaximo);
criaNo(raiz.filho.get(indice), nivel, nivelMaximo);
//nivel++;
}
}
}
}
//Cria a árvore
void criaArvore(ArrayList<Double> c)
{
lista = c;
criaRaiz();
criaNo(raiz, 0, nivelMaximo(c.size()));
}
void listaFilhos(No raiz)
{
for (int i = 0; i < raiz.filho.size(); i++)
{
System.out.println(raiz.filho.get(i).valor);
}
for (int i = 0; i < raiz.filho.size(); i++)
{
listaFilhos(raiz.filho.get(i));
}
}
//Mostra os filhos de cada nó
void mostraFilhos()
{
listaFilhos(raiz);
}
}
[/code]