Números repetidos en un array Java

30/Ene/2014 Java , , , , 9 Comentarios

Los ejercicios de manipulación de arrays son muy recomendables para aprender la lógica de programación Java, así como sus estructuras. De esta forma tenemos algunos ejemplos como encontrar el primer número repetido, encontrar el número mayor y su posición,...

En este caso vamos a ver como podemos encontrar los números repetidos en un array Java. Es decir, la idea es partir de un primer array que contenga los números a buscar.

  1. int numeros[] = {1,2,3,4};

Y tener un segundo array que contenga la lista sobre la que buscamos.

  1. int lista[]= {2,4,5,2,4,4,4,3,4,2,3};

Una solución rápida sería realizar dos bucles for, el primero que recorra el primer array Java y el segundo que recorra el segundo array Java.

  1. for (int x=0;x<numeros.length;x++) {
  2. for (int y=0;y<lista.length;y++) {
  3. if (numeros[x]==lista[y])
  4. System.out.println("El número "+numeros[x]+" está repetido");
  5. }
  6. }

La verdad que este código funcionaría ya que al recorrer los dos arrays Java chequearíamos todos los números. Si bien vamos a intentar que sea un poco más óptimo en la búsqueda. Y es que la idea es en primer lugar ir recorriendo el array de números (igual que hacíamos antes).

  1. for (int x=0;x<numeros.length;x++) {
  2. ....
  3. }

Pero en la búsqueda sobre la lista vamos a utilizar un bucle while de Java. Este bucle contendrá dos condiciones, por un lado la del límite del array y por otro un flag que nos diga si hemos encontrado el número, ya que en este caso no hace falta buscar más y podremos parar la búsqueda.

El código sería el siguiente:

  1. for (int x=0;x<numeros.length;x++) {
  2. encontrado = false;
  3. iter = 0; // Iterador
  4.  
  5. while ((!encontrado) && (iter < lista.length)) {...}
  6. }

Vemos que hemos utilizado un flag encontrado que estará a "false" mientras no encuentre el número, será en este momento cuando cambiemos su valor para salir del bucle.

  1. for (int x=0;x<numeros.length;x++) {
  2. encontrado = false;
  3. iter = 0; // Iterador
  4.  
  5. while ((!encontrado) && (iter < lista.length)) {
  6. if (lista[iter] == numeros[x])
  7. encontrado = true;
  8. iter++;
  9. }
  10. }

Ya solo nos quedará preguntar por la variable encontrado para ver si se ha encontrado el número.

  1. for (int x=0;x<numeros.length;x++) {
  2. encontrado = false;
  3. iter = 0; // Iterador
  4.  
  5. while ((!encontrado) && (iter < lista.length)) {
  6. if (lista[iter] == numeros[x])
  7. encontrado = true;
  8. iter++;
  9. }
  10.  
  11. if (encontrado)
  12. System.out.println (numeros[x] + " es un número repetido. Encontrado en " + iter + " búsquedas");
  13. else
  14. System.out.println (numeros[x] + " no está en la lista. No encontrado en " + iter + " búsquedas");
  15. }

Adicionalmente vemos que en la variable iter tenemos el número de búsquedas que hemos realizado en el segundo array Java. Con esto ya tenemos resuelto como buscar números repetidos en un array Java.

Vídeos sobre Java


Difunde el Conocimiento

Si te ha gustado el artículo o te ha sido de utilidad, no dejes de compartirlo con tus amigos en las redes sociales... Te estaremos muy agradecidos. :-D

9 comentarios en “Números repetidos en un array Java”

Víctor Cuervo

andres

si tendo dos array y hay repetidos entre esos dos como ago para que aparescan en un tercer array?

Víctor Cuervo

Dyana

Hola!! y como se haria si fuera un vector de tipo string con 5 campos, pero se ocupa q los string ingresados no sean repetidos , pero como tienes una variable contadora ej: nombre[i] no puedes hacer un if por los tipos como se haria en ese caso???

Víctor Cuervo

Víctor Cuervo

Si quieres hacer un control sobre claves repetidas te recomendaría a utilizar un HashMap. Te dejo un enlace dónde tienes varios ejemplos para que veas cómo funciona. http://lineadecodigo.com/tag/java-collection-hashmap/

Saludos.

Víctor Cuervo

Alan

Buen día amigos, saludos desde México, necesito su ayuda por favor, lo que pasa es que tengo que generar un array de 100×100 con números aleatorios, y después el programa me debe de decir cuántas veces se repite cada número que se encuentra en el array.

Aquí está mi código, lo de el arreglo aleatorio está fácil pero no se como implementar el código para la repetición de los números, en mi código vienen algunas líneas que genera el arreglo en un archivo .pgm pero no hagan caso a eso. Saludos espero y puedan ayudarme

import java.io.*;
import java.util.*;

public class arrelgoBidimensionalCopia {

public arrelgoBidimensionalCopia() {
}

public void imp_arreglopgm(String nombre){

File f;
FileWriter w;
PrintWriter wr;

Random rnd=new Random();
int[][]matriz=new int[100][100];

try{
f=new File(nombre);
w=new FileWriter(f);
wr=new PrintWriter(w);
wr.write(“P2”);
wr.append(“\n255”);
wr.append(“\n100 100”);
wr.append(“\n”);

for (int x = 0; x < matriz.length; x++) { //FOR PARA LLENAR EL ARREGLO CON NÚMEROS ALEATORIOS
for (int y = 0; y < matriz[x].length;y++) {

matriz[x][y] =rnd.nextInt(255+1);
}
}

for (int x = 0; x < matriz.length; x++) { //FOR QUE IMPRIME VALORES DE ARREGLO EN CONSOLA
for (int y = 0; y < matriz[x].length;y++)
System.out.printf( "%d ", matriz[x][y] );
System.out.println();

}
for (int x = 0; x < matriz.length; x++) { //FOR QUE GUARDA VALORES DE ARREGLO EN EL ARCHIVO .PGM
for (int y = 0; y < matriz[x].length;y++)

wr.print(matriz[x][y]+" ");
wr.println();

}

wr.close();

}catch(Exception ex){
System.out.println ("Error"+ex);
}
}

public static void main(String[] args) {
arrelgoBidimensionalCopia metodo_imp=new arrelgoBidimensionalCopia();
metodo_imp.imp_arreglopgm("Archivo.pgm");

}
}

Víctor Cuervo

Sergio

Cómo le harían para buscar en un array que tenga registros repetidos? para que al final me muestre el listado de registros repetidos?’… digamos: numeros[] = {1,2,3,3,4,6,7,3};
y que nos muestre 3,3,3 con sus respectivas posiciones de memoria?

Víctor Cuervo

moa

creo que tu algoritmo tiene un error: imaginemos que el arreglo lista es así:

int lista[]= {1,2,3,4,0,0,0,0,0,0,0}; que va a pasar??

nos va decir que el arreglo tiene 4 números repetidos…. (cosa que es mentira) …….

La solución que proporciono es la siguiente (creo que puede mejorarse):

class E {
public static void main(String[] args) {

int numeros[] = {1,2,3,4};
int lista[]= {1,0,1,1,1,1,0,0,0,0,2};

int iter, n, index;
boolean encontrado, repetido;

for (int x: numeros) {
encontrado = false;
repetido = false;
iter = 0; // Iterador
n = 0; // Contador
index = 0; // índice temporal

while (!repetido && (iter 1) repetido = true;
}
iter++;
}

if (encontrado && repetido)
System.out.println (“El ” +x + ” es un número repetido. Encontrado por segunda vez en el índice ” + (iter – 1));
else if (encontrado && !repetido)
System.out.println (“El ” +x + ” solo esta una vez en la lista. Encontrado en el índice “+index);
else
System.out.println (“El ” +x + ” no está en la lista.”);
}
}
}

Víctor Cuervo

Héc

Hola me agrada mucho la forma en que explican los post’s tengo una duda ¿En caso de llenar un arreglo de tamaño 10 con números aleatorios? ¿Cómo se podría hacer?

Saludos y muchas gracias!!!

Víctor Cuervo

Víctor Cuervo

@Héc,

Pues la idea es que vayas generando los números aleatorios (http://lineadecodigo.com/java/numero-aleatorio-en-java/) en un bucle y luego vayas cargando el array (http://lineadecodigo.com/java/inicializar-un-array-en-java/)

Combinando esos dos ejemplos y con un bucle de 1 a 10 tienes el ejemplo.

La idea me parece buena e intentaremos publicarlo en breve en la página.

Saludos.

Víctor Cuervo

Víctor Cuervo

Hola @Hec, hemos publicado este ejemplo en http://lineadecodigo.com/java/llenar-un-array-con-numeros-aleatorios-en-java/
Espero que así sea más sencillo el poder entenderlo.

Saludos.

¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*

*