2010/8/5 Higor <[email protected]>: > Fala Gustavo, > quanto ao recuo eu não me preocupo porque se eu colocar um espaço em branco > onde ele são iguais já serve pq automaticamente ele pula de coluna > no relatorio onde tiver um espaço em branco. Entao ele acaba fazendo o recuo > automaticamente. > > Eu me preocupo com a situação abaixo onde o UN de teste deve ser impresso no > último caso, portanto acredito que o melhor é tentar > pegar o prefixo inteiro da lista e comparar. > > Empresa de Teste | Diretoria de teste | UN de teste | UR de teste | > teste > Empresa de Teste | Diretoria de teste | UN de teste | UR de teste 2 | > teste 2 > Empresa de Teste 2 | Diretoria de teste 2 | UN de teste | UR de teste 2 | > teste 2 > > Empresa de Teste > Diretoria de teste > UN de teste > UR de teste > teste > UR de teste 2 > teste 2 > Empresa de Teste 2 > Diretoria de teste 2 > UN de teste > UR de teste 2 > teste 2 > > A estrutura do ArrayList de Entrada que eu estou usando é a mesma > ArrayzaoList[3] > [0] ArrayList com empresa, diretoria, un de teste, ur de teste, centro de > custo. > [1] ArrayList com empresa, diretoria, un de teste, ur de teste, centro de > custo. > [2] ArrayList com empresa, diretoria, un de teste, ur de teste, centro de > custo. > > Então, para fazer a impressao, dado o que tu me disse eu pensei em fazer da > seguinte forma: > > Cont = numero_de_camadas_existente (que é 5 para este ex) > ArrayList novaLista = new ArrayList(); //contem a nova lista > > int i = 0; > int guardaQtosIguais = 0; > int primeiroElementoDeveSerImpresso = 0; > ArrayList guarda; > > while (i != Cont) { > guarda = new ArrayList(); //zera o guarda > > for (cada ARRAYLIST da grande lista de arrays de entrada) { > > primeiroElementoDeveSerImpresso++; > > for (cada elemento do ARRAYLIST) { > guarda.Add(elemento); > } > > Se (primeiroElementoDeveSerImpresso==1) novaLista.Add(guarda); > > guardaQtosIguais = 0; > for (j=0; j<i; j++) { > Se (guarda[j] == ARRAYLIST[j]) { > temElemento = true; > guardaQtosIguais++; > } else { temElemento = false; } > } > > Se (temElemento == true) { > ArrayList novoElementoDaListComEspacoEmBranco = new ArrayList(); > int j = 0; > for (cada elemento do ARRAYLIST) { > Se (j<guardaQtosIguais) { > novoElementoDaListComEspacoEmBranco.Add(""); > j++; > } > else { > novoElementoDaListComEspacoEmBranco.Add(elemento); > j++; > } > } > novaLista.Add(ARRAYLIST); > } > } > i++; > } > > Já detectei alguns problemas onde ele pode contar uma camada superior só > porque é igual e daria problema, vou ver isso agora. > Se tu puderes me indicar se é mais ou menos por ae agradeço. > > Mais uma vez obrigado pela ajudar Gustavo. > > Abraços. > Higor > > Em 4 de agosto de 2010 21:07, Gustavo <[email protected]> escreveu: >> >> Acho que neste caso a ideia é pegar o primeiro elemento de uma lista e >> coletar todas as listas que têm aquele mesmo elemento como o primeiro >> elemento, e removendo este elemento de cada uma delas. Depois aplica a de >> forma recursiva para esta lista coletada. >> >> Você poderia colocar a impressão dos elementos usando essa mesma função, >> mas daí também vai tem que passar como parâmetro o recuo necessário para >> imprimir os elementos sempre que trocar de linha. >> >> Na verdade acho que usando essa ideia nem precisaria do algoritmo >> anterior, bastando não imprimir as listas que, após a recursão, ficam >> vazias, mas você pode manter o algoritmo anterior por simplicidade. >> >> Em 4 de agosto de 2010 20:30, Higor <[email protected]> escreveu: >>> >>> Fala Gustavo, >>> puuuxaaa como posso lhe agradecer? Funcionou de forma perfeita. Bem >>> melhor >>> que a minha estrutura anterior. >>> Ele realmente retornou um array com os dois arrays dentro de um array com >>> a estrutura: >>> >>> Empresa de Teste | Diretoria de teste | UN de teste | UR de teste | teste >>> Empresa de Teste | Diretoria de teste | UN de teste | UR de teste 2 | >>> teste 2 >>> >>> Porém, eu preciso exibir da seguinte forma: >>> >>> Empresa de Teste | Diretoria de teste | UN de teste | UR de teste | teste >>> >>> UR de teste 2 | teste 2 >>>
for, ++, ArrayList? Isso realmente é uma lista de discussão de Lisp? ;) Dito isso, ou eu não entendi o problema, ou ele se resume em construir e percorrer uma árvore, cujos níveis contém empresa, diretoria, UN, etc. A cada linha, percorre-se a estrutura, até chegar na folha. Se, em algum momento, um nó não for encontrado no caminho, ele é criado. Assim evita-se duplicação. Na hora de imprimir, basta percorrer a árvore de novo, usando uma busca em profundidade, imprimindo o caminho até as folhas. --Stephen Sent from my Emacs -- You received this message because you are subscribed to the Google Groups "Lisp-br" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/lisp-br?hl=en.
