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)
- Home
- >
- Fórum
- >
- Profissional
- >
- Programação, Sc...
- >
- Problema com lista
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í...
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..."
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.
Seja objetivo ao pedir ajuda para um problema. A solução depende das informações que fornecer. Linux User Member: 554854 - registre-se aqui
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.
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..."
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?
Seja objetivo ao pedir ajuda para um problema. A solução depende das informações que fornecer. Linux User Member: 554854 - registre-se aqui
Criar esta lista completa é necessário?
Você está estudando como implementar uma lista combinada ou algo do tipo?
Fiz o questionamento porque uma abordagem diferente resolve fácil.
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?
Seja objetivo ao pedir ajuda para um problema. A solução depende das informações que fornecer. Linux User Member: 554854 - registre-se aqui
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.
Seja objetivo ao pedir ajuda para um problema. A solução depende das informações que fornecer. Linux User Member: 554854 - registre-se aqui
- 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.
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
Seja objetivo ao pedir ajuda para um problema. A solução depende das informações que fornecer. Linux User Member: 554854 - registre-se aqui