Com problemas para comparar numeros em uma LinkedList()

Já tentei varios coisas diferentes e não consigo achar solução:
O que tenho que fazer é simples: Preciso comparar duas LinkedList() e todo valor igual encontrado eu apago este valor em uma LinkedList().

O que fiz foi o seguinte:


// Retira os fechados, pois eles nao contam para novos caminhos
      for (int i = 0; i < clone.size(); i++) {
           for (int j = 0; j < Fechado.size(); j++) {

             Valor1.append(clone.get(i));
             Valor2.append(Fechado.get(j));

            if((String.valueOf(Valor1)).equals(String.valueOf(Valor2))){

              link1[count] = i;
              count++;

            }
            Valor1.delete(0, Valor1.length());
            Valor2.delete(0, Valor2.length());
                        }
                }




       for(int i = 0; i < count; i++) {
             clone.remove(link1[i]);
            }

mas vive dando erro.

Geralmente (o que me pareceu) é que o erro dá quando encontra dois valores para ser retirado, e o erro aponta para clone.remove(link1[i]
[/quote]

[quote]for(int i = 0; i < count; i++) {
clone.remove(link1[i]);
} [/quote]

  • Não analisei o que você pretende, porém se você executar o remove
    em uma lista que está em um “for” o array perde a referencia da posição.

faça assim…(exemplo)
for(int i = nomeLista.sise() - 1; i >= 0; i–){

nomeLista.remove(valor);
}

deixa eu explicar melhor, “ficou meio confuso”.

Quando você remove um elemento de uma lista, e esta lista está em um for que por sua vez lê as posições dos elementos do menor maior, a lista perde a referencia do indice. Porém o mesmo não acontece quando você lê a lista de traz para frente (do maior para o menor),pois o elemento removido tinha uma posição maior do que a que está sendo lida.

Isto acontece porque as Listas tem o seu tamanho alterado dinamicamente.

lista.add(“valor1”); size = 1
lista.add(“valor2”); size = 2
lista.add(“valor3”); size = 3

for(int i = 0; i < lista.size(); i++){
lista.remove(“valor1”); //na primeira vez size = 3, na segunda o valor do size passa para 2 e na terceira é 1
}

Um abraço

fiz está mudança, mas continua dando pau quando precisa retirar dois elementos…

com o mesmo codigo e com a mudança, eu tenho as seguintes saidas:

2
&#91;1230, 0213&#93;
&#91;1230, 1032, 0132, 3102, 3120, 3021, 0321, 2301, 2310, 2013, 0213, 1203&#93;

&#91;0213&#93;
2
&#91;2013, 1203&#93;
&#91;1230, 1032, 0132, 3102, 3120, 3021, 0321, 2301, 2310, 2013, 0213, 1203, 0213&#93;
&#91;1203&#93;
java.lang.ArrayIndexOutOfBoundsException&#58; 2

	at Projeto_IA.Janela1.menor_caminho&#40;Janela1.java&#58;271&#41;

	at Projeto_IA.Janela1.Resolve_actionPerformed&#40;Janela1.java&#58;570&#41;

Explicando:

[0213]
2
[2013, 1203]
[1230, 1032, 0132, 3102, 3120, 3021, 0321, 2301, 2310, 2013, 0213, 1203, 0213]
[1203]

pai: [0213]

filhos:[2013, 1203]

numeros de filhos que devem ser excluidos: 2

Formaçoes que já foram usadas: [1230, 1032, 0132, 3102, 3120, 3021, 0321, 2301, 2310, 2013, 0213, 1203, 0213]

saida:[1203]

ai esta o erro…a saida devia swer [] pelo menos…não sei pq passa o valor 1203

Se alguem tiver uma ideia melhor, ou um metodo mais facil, por favor me dê uma dica…

Não sou conhecer profundo de java e não sei o que mais pode ser feito.

Velho, vc tah complicando :wink:

Se vc quer apagar de uma lista todos os elementos repetidos:

		List&lt;Integer&gt; lista1 = new LinkedList&lt;Integer&gt;&#40;&#41;;
		lista1.add&#40;10&#41;;
		lista1.add&#40;20&#41;;
		lista1.add&#40;30&#41;;
		lista1.add&#40;40&#41;;

		List&lt;Integer&gt; lista2 = new LinkedList&lt;Integer&gt;&#40;&#41;;
		lista2.add&#40;10&#41;;
		lista2.add&#40;30&#41;;
		lista2.add&#40;50&#41;;

		for &#40;Integer i &#58; lista1&#41; &#123;
			lista2.remove&#40;i&#41;;
		&#125;

		System.out.println&#40;&quot;Lista 1&quot;&#41;;
		for &#40;Integer i &#58; lista1&#41; &#123;
			System.out.println&#40;i&#41;;
		&#125;
		System.out.println&#40;&quot;Lista 2&quot;&#41;;
		for &#40;Integer i &#58; lista2&#41; &#123;
			System.out.println&#40;i&#41;;
		&#125;

Apaga da lista 2 todos elementos repetidos nas duas listas… unica coisa que precisou fazer para isso foi:

		for &#40;Integer i &#58; lista1&#41; &#123;
			lista2.remove&#40;i&#41;;
		&#125;