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.

Responder a