Comparar dois vetores e criar um novo com os valores faltantes

Oi pessoal, estou tentando fazer que o código compare dois vetores e cria um novo vetor com os elementos faltantes de ambos. Mas não sei como posso “colocar” os valores que faltam nesse novo vetor.

Tambem estou em duvida quanto a comparação que fiz no if

	int[] vetor1 = new int[] { 1,2,3,4,5 };
	int[] vetor2 = new int[] { 1,2,5 };
	int[] result = new int[10];
	
	
	for(int i = 0; i < 10; i++){
		for(int j = 0; j < 10; j++){
			if(vetor1[i] != (vetor2[i])){	
				result [] = 
			}

		}

Não entendi o que vc quis dizer com elementos faltantes. Dê um exemplo por favor.

Transforme seu Vetor em um ArrayList:

String [] ars = new String[]{"abc", "def"};
List lista = Arrays.asList(args);
ArrayList lista = new ArrayList(lista);

Depois de transformado seu Vetor numa Lista você pode usar o comando:
lista.contains(objeto)
Sendo assim você pode fazer um for para percorrer o maior vetor e fazer a comparação com o segundo vetor.

Então crie um ArrayList para os itens faltantes:
ArrayList<Integer> lista = new ArrayList<>();
E adicione os objetos faltantes na lista:
lista.add(objeto);

1 curtida

Você quer os elementos de vetor1 que não estão em vetor2?

Se for isso, não adianta verificar só se eles são diferentes, como você fez no seu if. Você precisa percorrer vetor2 e verificar se o valor está contido nele (e somente se não estiver, você adiciona no array final):

int[] vetor1 = new int[] { 1, 2, 3, 4, 5 };
int[] vetor2 = new int[] { 1, 2, 5 };
int[] result = new int[vetor1.length];
int cont = 0;
for (int n1 : vetor1) { // para cada elemento de vetor1
    // verificar se n1 está em vetor2
    boolean esta = false;
    for (int n2 : vetor2) { // verifica se n1 está em vetor2
        if (n2 == n1) { // está
            esta = true;
            break; // já vi que n1 está em vetor2, posso parar de procurar
        }
    }
    if (!esta) { // se n1 não estiver em vetor2, adiciona nos resultados
        result[cont] = n1;
        cont++;
    }
}

Como não necessariamente result ficará totalmente ocupado (pois alocamos um valor possivelmente maior que a quantidade de elementos que foram encontrados), você tem que iterar até a quantidade encontrada:

System.out.println("valores de vetor1 que não estão em vetor2:");
for (int i = 0; i < cont; i++) {
    System.out.println(result[i]);
}

Como provavelmente é um exercício, “querem” que você faça manualmente. Mas uma forma mais direta é usar o que já tem pronto, e criar Set's a partir dos arrays:

int[] vetor1 = new int[] { 1, 2, 3, 4, 5 };
int[] vetor2 = new int[] { 1, 2, 5 };
Set<Integer> s1 = Arrays.stream(vetor1).boxed().collect(Collectors.toSet());
Set<Integer> s2 = Arrays.stream(vetor2).boxed().collect(Collectors.toSet());

s1.removeAll(s2); // remove de s1 todos os elementos de s2

int[] result = s1.stream().mapToInt(Number::intValue).toArray();
System.out.println("valores de vetor1 que não estão em vetor2:");
for (int n : result) {
    System.out.println(n);
}
2 curtidas

Olá, muito obrigada pela explicação. Consegui fazer por lambda