Ver Mensaje Individual
  #1 (permalink)  
Antiguo 31/08/2012, 23:01
emma93
 
Fecha de Ingreso: abril-2008
Ubicación: Córdoba
Mensajes: 103
Antigüedad: 16 años, 7 meses
Puntos: 4
Información Código eficiente?

Buenas noches a todos.

Tengo una consulta, tengo que hacer un tp para la facu, y en éste se pide basicamente cargar dos vectores enteros a y b (arreglos primitivos, nada de usar ArrayList ni la clase Vector ni nada).

En un punto me pide generar un tercer vector con las repeticiones que hay entre el vector a y b.

Lo estaba resolviendo y quería saber si ésta es una forma eficiente y correcta de hacerlo:

Código Javascript:
Ver original
  1. public int[] getNumerosRepetidos(){
  2.         //Los primeros dos for sera para contar la cantidad de elementos repetidos que existen entre el arreglo a y b
  3.         int contadorRepetidos = 0;
  4.         for(int m=0; m < a.length; m++){ //Recorremos vector a
  5.             for(int k=0; k < b.length; k++){ //Recorremos vector b
  6.                 if(a[m] == b[k]){ //Si ambos son iguales
  7.                     contadorRepetidos++;
  8.                 }
  9.             }
  10.         }
  11.        
  12.         int[] resultados        = new int[contadorRepetidos];
  13.         int iteracionRepetido   = 0;
  14.         for(int m=0; m < a.length; m++){ //Recorremos vector a
  15.             forArregloB: for(int k=0; k < b.length; k++){ //Recorremos vector b
  16.                 if(a[m] == b[k]){ //Si ambos son iguales
  17.                     for(int l=0; l < resultados.length; l++){ //Recorremos vector de resultados
  18.                         if(resultados[l] == b[k]){ //Controlo que el numero no este en el arreglo de resultados para no duplicar datos
  19.                             continue forArregloB; //Si está, entonces no me hace falta buscar repeticiones con éste numero, asi que continúo
  20.                         }
  21.                     }
  22.                     resultados[iteracionRepetido] = a[m]; //Guardamos en los resultados en la posicion correspondiente
  23.                     iteracionRepetido++; //Sumamos uno a la posicion
  24.                 }
  25.             }
  26.         }
  27.        
  28.         return resultados;
  29.     }

Como debo declarar un vector Resultado, del cual no se con anticipación el tamaño que tendrá, primero debo recorrer con dos for la cantidad de elementos repetidos.

Luego con otros dos for lo que hago es guardar resultados, y un tercer for dentro de éstos, para comprobar que el elemento insertado en el vector resultados no se encuentre ya incluído.

¿Ésto es una forma eficiente de realizarlo? Me gusta programar de forma ordenada y sinceramente ésto de hacer tantos for me parece una "gronchada", pero no le encuentro otra manera.

Espero puedan ayudarme, muchas gracias.

Saludos

PD: Si aportan algo, por favor consideren que son arreglos primitivos, nada de usar clases como ArrayList o Vector como ya aclaré.