Java - Necesito vuestra ayuda ARRAYS

   
Vista:

Necesito vuestra ayuda ARRAYS

Publicado por asd (3 intervenciones) el 11/01/2016 23:55:33
Hola a todos, necesito vuestra ayuda para un metodo.

he creado un metodo llamado comunes que meto por parametros dos vectores, los cuales he rellenado con numeros aleatorios, tengo el siguiente problema EJ:

Vector 1: 6 - 0 - 1 - 2 - 1 - 2 - 6 - 5
Vector 2: 4 - 5 - 0 - 5 - 0 - 4 - 6 - 6

y me marca lo siguiente

Los numeros comunes son: 6 - 6 - 0 - 0 - 6 - 6 - 5 - 5

no consigo que al indicarle cuales son los numeros comunes no me los repita.

Los numeros comunes son: 0 - 6 - 5

este es el metodo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static int[] comunes(int vector1[],int vector2[]){
 
	int m=0;
	int[] vector5=new int[vector1.length];
 
	for (int i = 0; i < vector1.length; i++) {
		for (int j = 0; j< vector2.length; j++){
 
			if(vector1[i]==vector2[j]){
 
				vector5[m]=vector1[i];
				ES.msg(vector5[m]+" - ");
				m++;
			}
		}
	}
 
	return vector5;
}

Espero vuestra ayuda y gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Necesito vuestra ayuda ARRAYS

Publicado por Juan R. (94 intervenciones) el 12/01/2016 01:10:36
Buenas asd

Está bastante bien tu código, sólo te falta darte una cosa, tendrías que recorrer el vector5 para asegurarte que no está el valor introducido ya, si es así, no lo añades y si no está, lo añades al final.

Ánimo

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Necesito vuestra ayuda ARRAYS

Publicado por arck (145 intervenciones) el 12/01/2016 11:12:58
mi recomendación es que lo hagas con Set.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
public class prueba {
 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] lista1 = new int[8];
		lista1[0] = 6;
		lista1[1] = 0;
		lista1[2] = 1;
		lista1[3] = 2;
		lista1[4] = 1;
		lista1[5] = 2;
		lista1[6] = 6;
		lista1[7] = 5;
 
		int[] lista2 = new int[8];
		lista2[0] = 4;
		lista2[1] = 5;
		lista2[2] = 0;
		lista2[3] = 5;
		lista2[4] = 0;
		lista2[5] = 4;
		lista2[6] = 6;
		lista2[7] = 6;
 
		System.out.print(comunes(lista1, lista2).toString());
 
		return;
	}
 
	public static Set<Integer> comunes(int vector1[],int vector2[]){
 
		Set<Integer> prueba = new HashSet<Integer>();
 
		for (int i:vector1) {
			for (int j :vector2){
 
				if(i==j){
 
					prueba.add(i);
				}
			}
		}
 
		return prueba;
	}
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Necesito vuestra ayuda ARRAYS

Publicado por asd (3 intervenciones) el 12/01/2016 14:14:04
gracias a ambos por las respuestas.
arck con set no puedo realizarlo ya que aun no hemos llegado eso, debo realizarlo con bucles.
intentare como dice el compañero juan R. pero si me podeis guiar un poco mejor.
Se me olvidaba los numeros aleatorios se crean automaticamente con otro metodo.
Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Necesito vuestra ayuda ARRAYS

Publicado por arck (145 intervenciones) el 12/01/2016 15:36:25
a ver si te lo puedo hacer sobre lo que me diste:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public static int[] comunes(int vector1[],int vector2[]){
 
	int m=0;
	int[] vector5=new int[vector1.length];
 
	for (int i = 0; i < vector1.length; i++) {
		for (int j = 0; j< vector2.length; j++){
 
			if(vector1[i]==vector2[j]){
//-----------------------------------------
                                boolean esta = false;
                                for(int n:vector5){
                                     if (n == vector1[i]){
                                          esta = true;
                                      }
 
                                }
                                if(!esta){
				          vector5[m]=vector1[i];
				          ES.msg(vector5[m]+" - ");
				          m++;
                                          esta = false;
                                }
//---------------------
			}
		}
	}
 
	return vector5;
}

la modificación es básicamente que cada vez que encuentres un numero que esta en los dos vectores compruebes si ya lo tienes en el array final o no, eso se hace en el for.
Con el boolean como bien indica es verdadero si esta en o no en el array en este caso si no esta como ya sabemos que es el repetido nos metemos en tu parte del código en el que lo insertas y entiendo que ES.msg lo mostrara por pantalla e incrementas la m, reinicializas el booleano y a seguir.

Pruébalo y me cuentas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
3
Comentar

Necesito vuestra ayuda ARRAYS

Publicado por asd (3 intervenciones) el 12/01/2016 16:12:04
Muchísimas gracias, funciona perfectamente, no sabes como os lo agradezco, acabo de empezar en esto y me esta costando bastante, espero que poco a poco vaya asimilando todos los conceptos, un saludo y gracias de nuevo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Necesito vuestra ayuda ARRAYS

Publicado por Juan R. (94 intervenciones) el 12/01/2016 17:29:31
Exactamente eso es lo que decía yo, pero mejor explicado no se puedo. Un +1 arck
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar