Logo Hardware.com.br
sergiordasilva
sergiordasil... Membro Senior Registrado
216 Mensagens 10 Curtidas

[Resolvido] Problema com lista

#1 Por sergiordasil... 04/11/2016 - 14:30
Alguém pode me ajudar com algum desses problemas?

1) Eu tenho uma lista de sucos {Abacaxi, Laranja, Acerola, Açai, Morango, Uva, Limão}. Eu preciso gerar um nova lista que combine dois tipos de sucos, o que eu pensei foi usar dois combobox para exibir a lista de sucos e quando for clicado no botão salvar ele verifica se o par selecionado já está cadastrado. Exemplo: Selecionei Laranja e Açai eu tenho que verificar se na lista tem Laranja/Açai ou Açai/Laranja. A solução que encontrei foi usando quatro for's, dois percorrendo a lista do inicio para o fim e outros dois do fim para o inicio. Minha dúvida é esta solução é a correta?

//do inicio para o fim
for(int i=0; i for(int j=0; i if(i //1º Verificação (Laranja/Açai)
//do fim para o inicio
for(int k=lista.size()-1; k>-1; k--)
for(int l=lista.size()-1; l>-1; l--)
if(k>l)
//2º Verificação (Açai/Laranja)
tpcvasco
tpcvasco General de Pijama Registrado
2.9K Mensagens 330 Curtidas
#2 Por tpcvasco
06/11/2016 - 13:27
Não entendi sua primeira dúvida: a variável 'lista' já é sua segunda lista combinada?
Aliás, pra q gerar uma nova lista? A sua lista inicial de sucos já não resolveria? Bastaria testar se ela tem Laranja e depois se ela tem Açaí...
"Milhouse: - Médicos e bombeiros são heróis.
Bart Simpson: - Olha, as casas continuam pegando fogo e as pessoas continuam doentes. Os verdadeiros heróis são os Schwarzenegger's, os Stallone's, e, em menores proporções, os Vandame's..."
sergiordasilva
sergiordasil... Membro Senior Registrado
216 Mensagens 10 Curtidas
#3 Por sergiordasil...
07/11/2016 - 15:28
A segunda lista contém o mix de sucos. O que eu quero fazer é na tela para cadastrar o mix tem dois combos, eu seleciono no primeiro 'laranja' e no segundo 'açai' clico em cadastrar e ele cadastra. O mix 'Laranja/Açai' esta cadastrado. O problema é que se outra pessoa abrir o sistema e selecionar no primeiro combo 'açai' e no segundo 'laranja' teremos cadastros 'Açai/Laranja'. O mix é o mesmo (Laranja/Açai=Açai/Laranja). Então eu preciso de uma função para verificar se o mix já está cadastrado. Me disseram para fazer o seguinte: você exibi os mix que já estão cadastrados. Sim, eu posso fazer isso, mas pode acontecer de um usuário desatento fazer uma dessas.
E se o SO operacional mais usado fosse o Linux?

Seja objetivo ao pedir ajuda para um problema. A solução depende das informações que fornecer. Linux User Member: 554854 - registre-se aqui
tpcvasco
tpcvasco General de Pijama Registrado
2.9K Mensagens 330 Curtidas
#4 Por tpcvasco
07/11/2016 - 16:21
Pelo q eu entendi, vc está fazendo em Java, né? Em Java vc pode criar um Set, q é um conjunto, ou seja, só grava coisas q sejam diferentes. Aí o método equals() do seu objeto Mix vc define q os dois valores devem ser diferentes.
"Milhouse: - Médicos e bombeiros são heróis.
Bart Simpson: - Olha, as casas continuam pegando fogo e as pessoas continuam doentes. Os verdadeiros heróis são os Schwarzenegger's, os Stallone's, e, em menores proporções, os Vandame's..."
sergiordasilva
sergiordasil... Membro Senior Registrado
216 Mensagens 10 Curtidas
#5 Por sergiordasil...
08/11/2016 - 22:11
Fiz um código de exemplo:


Suco suco1 = new Suco("Laranja"
Suco suco2 = new Suco("Açai"

// Laranja/Açai
Mix mix1 = new Mix();
mix1.setSuco1(suco1);
mix1.setSuco2(suco2);

// Açai/Laranja
Mix mix2 = new Mix();
mix2.setSuco1(suco2);
mix2.setSuco2(suco1);

// Deve ser iguais
System.out.println(mix1.hashCode());
System.out.println(mix2.hashCode());

// Deve imprimir Igual
if(mix2.equals(mix1)) {
System.out.println("Igual"
} else {
System.out.println("Diferente"
}


Como implemento o equals e o hascode?
E se o SO operacional mais usado fosse o Linux?

Seja objetivo ao pedir ajuda para um problema. A solução depende das informações que fornecer. Linux User Member: 554854 - registre-se aqui
sergiordasilva
sergiordasil... Membro Senior Registrado
216 Mensagens 10 Curtidas
#7 Por sergiordasil...
09/11/2016 - 13:15
O equals eu consegui fazer imprimir igual. O problema é que eu gostari que o hash fosse o mesmo.

O código completo está aqui:
http://pastebin.com/WeZV19yE

esquiloesperto qual seria a outra abordagem?
E se o SO operacional mais usado fosse o Linux?

Seja objetivo ao pedir ajuda para um problema. A solução depende das informações que fornecer. Linux User Member: 554854 - registre-se aqui
sergiordasilva
sergiordasil... Membro Senior Registrado
216 Mensagens 10 Curtidas
#8 Por sergiordasil...
10/11/2016 - 15:23
Consegui resolver. Fiz assim no metodo hashcode:

Objects.hashCode(this.suco1)+Objects.hashCode(this.suco2);

O problema era a ordem dos objetos que mudava.

No começo eu estava usando duas lista uma chamada Suco e outra Mix. O único problema é que eu dependia de 4 for's para fazer a verificação. Isso seria inviável se eu tivesse 10000 itens na lista. Dai eu criei dois objetos Mix e Suco. O problema persistia. Consegui fazer o equals funcionar fazendo as comparações inversas nos objetos. O próximo problema foi o hascode que não imprima igual. Um coloque me ajudou a perceber que o problema era a ordem dos objetos.

Em situação normal inverter os objetos não ocorria. Aqui o problema era que se você misturar Laranja com Açai ou Açai com Laranja o Mix final seria o mesmo.
E se o SO operacional mais usado fosse o Linux?

Seja objetivo ao pedir ajuda para um problema. A solução depende das informações que fornecer. Linux User Member: 554854 - registre-se aqui
sergiordasilva
sergiordasil... Membro Senior Registrado
216 Mensagens 10 Curtidas
#10 Por sergiordasil...
10/11/2016 - 22:36
esquiloesperto disse:
Bingo!
- Esta foi a abordagem que mencionei. Basta comparar com o inverso da combinação.

Nem sempre precisamos apontar a direção, um empurrãozinho é mais que suficiente.


Quando eu percebi que lista não a solução eu troquei por duas classes. O resultado final foi bem melhor: http://pastebin.com/cCeuCVUf
E se o SO operacional mais usado fosse o Linux?

Seja objetivo ao pedir ajuda para um problema. A solução depende das informações que fornecer. Linux User Member: 554854 - registre-se aqui
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal