[ajuda] resolvido

3 respostas
N

Ola pessoal ....

Se possivel... alguem poderia me ajudar a terminar meu código?
preciso fazer a união de 2 conjuntos (aUb) a interseção(caracteres semelhantes nos 2 conjuntos) e a - b .

entretanto como vcs podem ver no comentario inicial do meu código, como 2 caracteres ( a , b ) estão presentes nos 2 conjuntos, no meu array novo com (10 posições ja que o conjunto a e b possuem 10 elementos ) eu nao posso colocar no array da uniao caracteres repetidos , ou seja , será formadoum array novo com 10 posicoes sendo que só estarao sendo usadas 8 posições realmente.

desde já agradeço ...toda ajuda seramuito bem vinda.

package aula10;

import java.util.Scanner;

public class medida {

	/**EX:
	 * conjuntoA = A,B,C,D,E,F
	 * conjuntoB = A,B,G,H,I,J
	 */
	public static void main(String[] args) {

		char [] conjuntoA = new char[5];
		char [] conjuntoB = new char[5];
		char [] uniao = new char[10];
		
		
		Scanner leia = new Scanner(System.in);
		System.out.println("Digite 5 elementos : ");
		
		for ( int i  = 0 ; i < conjuntoA.length ; i++){
			conjuntoA[i] = leia.next().charAt(0);
			}
		
		System.out.println("Digite 5 elementos : ");
		for ( int i = 0 ; i < conjuntoB.length ; i++){
			conjuntoB[i] = leia.next().charAt(0);
			
		}
		for ( int i = 0 ; i < conjuntoA.length + conjuntoB.length; i++){
			

 // parei aqui :(

3 Respostas

CrOnNoS

Seu problema é o tamanho do array ?
Para isso você precisaria ou calcular o tamanho do array antes de cria-lo, por exemplo, checar quantos componentes repetidos existem e subtrair essa quantia do tamanho total depois.
Ou, a forma mais simples que é usar um array de tamanho dinâmico (cresce a medida que você adiciona elementos).
Em java você faz isso usando objetos da classe Collection como o mais básico: ArrayList();
No caso o seu novo array seria um new ArrayList();, e a cada novo componente você usaria o método “add()” para adicionar um caractere ao array.
Era isso mesmo que você precisava ?

sergiotaborda

Tem mesmo que usar array ? a API de collections já tem todas essas operações que vc precisa.
Se precisa mesmo de usar array, crie uma classe à volta dela para facilitar as operações. Algo assim

public Conjunto {

   private Object[] array;

   public Conjunto intersect(Conjunto outro){

            Conjunto() result = new Conjunto();
            // coloca os elementos que existem nos dois conjuntos

            for (Object t : array){
                 if(outro.contains(t)){
                         result.add(t);
                 } 
            }
   }

  public Conjunto subtract (Conjunto outro){

            Conjunto() result = new Conjunto();
            // remove os elementos que existem no outro
            // so retornando os que não existem nele

            for (Object t : array){
                 if(!outro.contains(t)){
                         result.add(t);
                 } 
            }
   }

   public Conjunto union(Conjunto outro){

            Conjunto() result = new Conjunto();
              // adiciona todos deste conjunto
              for (Object t : this.array){
                  result.add(t);
            }
// adiciona os do outro conjunto que ainda não estão na resposta
             for (Object t : outro.array){
                 if(!result.contains(t)){
                         result.add(t);
                 } 
            }
            
   }

  public boolean contains(Object obj){
//          como usamos um array temos que iterar. outros mecanismo 
//  poderiam ser usado para melhorar a performance.
// este método é que é o segredo de todas as operações.

             for ( Object t : array){
                      if (t.equals(obj)){
                            return true;
                    }
              } 
              return false;
 }
}
N

Muito obrigado Sergio era realmente isso que eu precisava .
Fico te devendo uma :wink:

Criado 24 de novembro de 2009
Ultima resposta 24 de nov. de 2009
Respostas 3
Participantes 3