[RESOLVIDO] Incluir elementos de um array em outro!

8 respostas
manolo

Pessoal, estou fazendo execícios envolvendo arrays, e estou com uma dificuldade que está me deixando louco.

Na verdade o professor pediu algumas maneiras de manipulação de array no mesmo exercício, mas o problema está sendo realizar a ultima opçao.

Vou postar o código completo abaixo para analise, e logo depois o bloco que estou com dificuldade.

import java.util.*;
public class Ex1 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		Scanner input = new Scanner(System.in);
		
		int A[] = new int[10];
		int B[] = new int[10];
		int C[] = new int[20];
		int D[] = new int[20];
		int E[] = new int[10];
		
		int i, j, x;
		int aux = 0;
		int sinal;
		int conta = 0;
		
		for ( i = 0; i<A.length; i++){
			System.out.println(" - Informe o " +(i+1)+ "º elemento do vetor A - ");
			A[i] = input.nextInt();
		}
		
		for ( i = 0; i<B.length; i++){
			System.out.println(" - Informe o " +(i+1)+ "º elemento do vetor B - ");
			B[i] = input.nextInt();
		}
		
		for ( i = 0; i< 10; i++){
			C[aux] = A[i];
			aux ++;
			C[aux] = B[i];
			aux ++;	
		}
		
		System.out.println(" O Vetor C fica:");
		for( i = 0; i<C.length; i++)
		System.out.println((i+1)+"º-"+C[i]);
		
		x = 0;
		for ( i = 0; i < A.length; i++){
			sinal = 0;
			for ( j = 0; j < D.length; j++){
				if (A[i] == D[j])
					sinal = 1;
			}
			if ( sinal == 0){
				D[x] = A[i];
				x ++;
			}
		
		}
		
		for ( i = 0; i < B.length; i++){
			sinal = 0;
			for ( j = 0; j < D.length; j++){
				if (B[i] == D[j])
					sinal = 1;
			}
			if ( sinal == 0){
				D[x] = B[i];
				x ++;
			}
		
		}
		
		System.out.println(" O Vetor D fica:");
		for ( i = 0; i < x; i++)
			System.out.println((i+1)+"º-"+D[i]);
		
		for ( i = 0; i < A.length; i++ ){
			for( j = 0; j < B.length; j++){
				if (A[i] != B[j]){
					conta ++;
				}
			}
		}
		int y = 0;
		if ( conta == 10 ){
			E[y] = A[i];
			y ++;
		}
		
		System.out.println(" O vetor E fica:");
		for ( i = 0; i < y; i++){
			System.out.println(E[i]);
		}
	}

}

Bom, a parte que não consigo solucionar se trata do seguinte.

Preciso formar o conjunto E com os elementos de A que não existem em B. E logo depois mostrar os elementos o conjunto E.

Eu acho que a logica está certa, o problema e que quando tento imprimir o conjunto E ele não imprimi nada! Qual será o problema galera?

Abaixo o trecho do código:

for ( i = 0; i < A.length; i++ ){
			for( j = 0; j < B.length; j++){
				if (A[i] != B[j]){
					conta ++;
				}
			}
		}
		int y = 0;
		if ( conta == 10 ){
			E[y] = A[i];
			y ++;
		}
		
		System.out.println(" O vetor E fica:");
		for ( i = 0; i < y; i++){
			System.out.println(E[i]);
		}

Se eu não ter explicado bem, me avisem ai!

Abraçoss. :)

8 Respostas

A
Ola Manolo, sua ideia estava certa, mas seu codigo não, fiz algumas alterações de uma olhada:
int y = 0;  
        for ( i = 0; i < A.length; i++ ){  
            for( j = 0; j < B.length; j++){  
                if (A[i] != B[j]){  
                    conta ++;  
                }  
            }  
        
          
        if ( conta == 10 ){  
            E[y] = A[i];  
            y ++;  
            conta=0;	
        }  
        }   
        System.out.println(" O vetor E fica:");  
        for ( i = 0; i < y; i++){  
            System.out.println(E[i]);  
        }

Bom primeira coisa sua condição para atribuir os valores de A para E estavam fora do seu laço.
Então eu a coloquei dentro do dele, mas ai sua variavel y era zerada em cada passagem, então coloquei sua declaração para fora do for.
Por ultimo sua variavel conta nunca era zerada então ela só ia ser 10 na primeiro valor de A que não existisse em B.

Em resumo é isso, se eu não expliquei bem ou você ficou com alguma duvida só perguntar.
:)

manolo

[b]Abaldove, obrigado pela ajuda!

Mas infelizmente ainda não está imprimindo no final. Fiz as modificaçoes e tentei achar o erro, só que ainda não está rolando!

O que pode ser cara! :?: [/b]

A

Poxa Manolo, que estranho pois eu testei antes de enviar, você poderia postar a sua classe EX1 com as alterações que você fez.

manolo

Olha só, fiz todas as alteraçoes (eu acho!).

import java.util.*;
public class Ex1 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		Scanner input = new Scanner(System.in);
		
		int A[] = new int[10];
		int B[] = new int[10];
		int C[] = new int[20];
		int D[] = new int[20];
		int E[] = new int[10];
		
		int i, j, x, y;
		int aux = 0;
		int sinal;
		int conta = 0;
		
		for ( i = 0; i<A.length; i++){
			System.out.println(" - Informe o " +(i+1)+ "º elemento do vetor A - ");
			A[i] = input.nextInt();
		}
		
		for ( i = 0; i<B.length; i++){
			System.out.println(" - Informe o " +(i+1)+ "º elemento do vetor B - ");
			B[i] = input.nextInt();
		}
		
		for ( i = 0; i< 10; i++){
			C[aux] = A[i];
			aux ++;
			C[aux] = B[i];
			aux ++;	
		}
		
		System.out.println(" O Vetor C fica:");
		for( i = 0; i<C.length; i++)
		System.out.println((i+1)+"º-"+C[i]);
		
		x = 0;
		for ( i = 0; i < A.length; i++){
			sinal = 0;
			for ( j = 0; j < D.length; j++){
				if (A[i] == D[j])
					sinal = 1;
			}
			if ( sinal == 0){
				D[x] = A[i];
				x ++;
			}
		
		}
		
		for ( i = 0; i < B.length; i++){
			sinal = 0;
			for ( j = 0; j < D.length; j++){
				if (B[i] == D[j])
					sinal = 1;
			}
			if ( sinal == 0){
				D[x] = B[i];
				x ++;
			}
		
		}
		
		System.out.println(" O Vetor D fica:");
		for ( i = 0; i < x; i++)
			System.out.println((i+1)+"º-"+D[i]);
		
		y = 0;
		for ( i = 0; i < A.length; i++ ){
			for( j = 0; j < B.length; j++){
				if (A[i] != B[j]){
					conta ++;
				}
			}
			
			if ( conta == 10 ){
				E[y] = A[i];
				y ++;
				conta = 0;
			}
		}
		
		
		System.out.println(" O vetor E fica:");
		for ( i = 0; i < y; i++){
			System.out.println(E[i]);
		}
	}

}

O que você acha?

A
Desculpa Manolo, eu revisei o codigo e realmente ele estava errado, então eu reescrevi e ficou assim:
import java.util.*;

public class Ex1 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		Scanner input = new Scanner(System.in);

		int A[] = new int[10];
		int B[] = new int[10];
		int C[] = new int[20];
		int D[] = new int[20];
		int E[] = new int[10];

		int i, j, x;
		int aux = 0;
		int sinal;
		int conta = 0;

		for (i = 0; i < A.length; i++) {
			System.out.println(" - Informe o " + (i + 1)
					+ "º elemento do vetor A - ");
			A[i] = input.nextInt();
		}

		for (i = 0; i < B.length; i++) {
			System.out.println(" - Informe o " + (i + 1)
					+ "º elemento do vetor B - ");
			B[i] = input.nextInt();
		}

		for (i = 0; i < 10; i++) {
			C[aux] = A[i];
			aux++;
			C[aux] = B[i];
			aux++;
		}

		System.out.println(" O Vetor C fica:");
		for (i = 0; i < C.length; i++)
			System.out.println((i + 1) + "º-" + C[i]);

		x = 0;
		for (i = 0; i < A.length; i++) {
			sinal = 0;
			for (j = 0; j < D.length; j++) {
				if (A[i] == D[j])
					sinal = 1;
			}
			if (sinal == 0) {
				D[x] = A[i];
				x++;
			}

		}

		for (i = 0; i < B.length; i++) {
			sinal = 0;
			for (j = 0; j < D.length; j++) {
				if (B[i] == D[j])
					sinal = 1;
			}
			if (sinal == 0) {
				D[x] = B[i];
				x++;
			}

		}

		System.out.println(" O Vetor D fica:");

		for (i = 0; i < x; i++)
			System.out.println((i + 1) + "º-" + D[i]);
		int y = 0;
		boolean existe = false;
		for (i = 0; i < A.length; i++) {
			for (j = 0; j < B.length; j++) {
				if (A[i] == B[j]) {
					existe = true;
				}
			}

			if (!existe) {
				E[y] = A[i];
				y++;
				
			}
			existe = false;
		}
		System.out.println(" O vetor E fica:");
		for (i = 0; i < y; i++) {
			System.out.println(E[i]);
		}
	}

}

Por favor teste esse agora, acredito que deva funcionar.

manolo

[b]Abaldove, funcionou certinho. :thumbup:

Agradeço pela ajuda cara!

Agora fico pensando, como eu posso obter os mesmos resultados sem números repetidos?

Acho que rola faze uma varredura no vetor E, para verificar se já existe o numero.

Estou certo?

Muito obrigado cara, sucesso![/b]

A

Sim cara, você pode fazer isso.

Só uma coisa, coloca o topico como resolvido certo.

E boa sorte

marcelo.bellissimo

manolo:
[b]Abaldove, funcionou certinho. :thumbup:

Agradeço pela ajuda cara!

Agora fico pensando, como eu posso obter os mesmos resultados sem números repetidos?

Acho que rola faze uma varredura no vetor E, para verificar se já existe o numero.

Estou certo?

Muito obrigado cara, sucesso![/b]

Sempre que você precisar de uma coleção que não contenha itens repetidos, use um Set.
Exemplo:

public static void main(String[] args) { Set<Integer> inteiros = new HashSet<Integer>(); System.out.println(inteiros.add(new Integer(1)));//true System.out.println(inteiros.add(new Integer(2)));//true System.out.println(inteiros.add(new Integer(1)));//aqui retorna false, pois o 1 ja foi incluido System.out.println(inteiros.add(new Integer(3)));//true }

Criado 22 de abril de 2010
Ultima resposta 22 de abr. de 2010
Respostas 8
Participantes 3