[JAVA] Encontrar numeros repetidos en un array
-
ForoParalelo: Miembro
[JAVA] Encontrar numeros repetidos en un array
Estoy haciendo un ejercicio en el que me dicen que muestre los numeros que se han introducido mas de una vez en un array. ¿Alguna idea?
¡Gracias!
-
hehe xd
-
AutoBanned
No te voy a hacer los deberes pero te voy a dar una pista: variable que aumente un número natural cada vez que de una vuelta de bucle y que llame a esa posición determinada, dentro del bucle otro bucle mas que compare a uno con todos los demás mediante un lf
-
ForoParalelo: Miembro
Iniciado por
rbbdev
No te voy a hacer los deberes pero te voy a dar una pista: variable que aumente un número natural cada vez que de una vuelta de bucle y que llame a esa posición determinada, dentro del bucle otro bucle mas que compare a uno con todos los demás mediante un lf
Gracias por la pista. He hecho lo siguiente:
//Pido 20 num al usuario
int[] vector = new int[20];
int num;
for (int i = 0; i <= 19; i++) {
System.out.print("Introduce un numero: ");
vector[i]=sc.nextInt();
//Dos bucles, para cada posicion compruebo las siguientes posiciones en el segundo bucle. Se que lo tengo mal, no me funciona, pero por mas que me como el coco no se hallar la solución
}
for (int i = 0; i <= 19; i++) {
num=i+1;
for (int j = num; j<=19; j++)
if (num==vector[j]){
System.out.println("Se repite el num: "+vector[j]);
}
}
el num=i+1 lo pongo para que lo me compruebe el mismo numero de la misma posición.
Última edición por zorex; 03/12/2014 a las 19:17
-
ForoParalelo: Miembro
Iniciado por
rbbdev
No te voy a hacer los deberes pero te voy a dar una pista: variable que aumente un número natural cada vez que de una vuelta de bucle y que llame a esa posición determinada, dentro del bucle otro bucle mas que compare a uno con todos los demás mediante un lf
Haz caso omiso a mi anterior mensaje, lo he conseguido de esta manera, ¿que te parece? Uso el "if (j!=i)" para que no me compare la misma posició y el "if (vector[i]!=vector[i-1]" para que no repita la comprobación del numero ya repetido.
int[] vector = new int[20];
int num;
for (int i = 0; i <= 19; i++) {
System.out.print("Introduce un numero: ");
vector[i]=sc.nextInt();
}
for (int i = 0; i <= 19; i++) {
for (int j = 0; j<=19; j++)
if (j!=i){
if (vector[i]==vector[j]){
if (vector[i]!=vector[i-1]){
System.out.println("Se repite el num: "+vector[j]);
}
}
}
}
Última edición por zorex; 03/12/2014 a las 19:41
-
AutoBanned
Iniciado por
zorex
Haz caso omiso a mi anterior mensaje, lo he conseguido de esta manera, ¿que te parece? Uso el "if (j!=i)" para que no me compare la misma posición.
int[] vector = new int[20];
int num;
for (int i = 0; i <= 19; i++) {
System.out.print("Introduce un numero: ");
vector[i]=sc.nextInt();
}
for (int i = 0; i <= 19; i++) {
for (int j = 0; j<=19; j++)
if (j!=i){
if (vector[i]==vector[j]){
System.out.println("Se repite el num: "+vector[j]);
}
}
}
Luego lo miro pero parece bastante cortito, cosa buena en principio
-
ForoParalelo: Miembro
Iniciado por
rbbdev
Luego lo miro pero parece bastante cortito, cosa buena en principio
Hay una cosa que no consigo solucionar. Funciona, pero le falta un detalle. Cuando un numero lo ha comprobado, al volvérselo a encontrar repetido, vuelve a decir que está repetido. No se como hacer para que el numero que ya a visto que esta repetido, no lo vuelva a comprobar. A ver si cuando tengas un ratito me hechas un cable
-
ForoParalelo: Miembro
Iniciado por
zorex
Haz caso omiso a mi anterior mensaje, lo he conseguido de esta manera, ¿que te parece? Uso el "if (j!=i)" para que no me compare la misma posició y el "if (vector[i]!=vector[i-1]" para que no repita la comprobación del numero ya repetido.
int[] vector = new int[20];
int num;
for (int i = 0; i <= 19; i++) {
System.out.print("Introduce un numero: ");
vector[i]=sc.nextInt();
}
for (int i = 0; i <= 19; i++) {
for (int j = 0; j<=19; j++)
if (j!=i){
if (vector[i]==vector[j]){
if (vector[i]!=vector[i-1]){
System.out.println("Se repite el num: "+vector[j]);
}
}
}
}
Utilizar dos bucles para este ejercicio me parece un poco excesivo, una alternativa es coger el array al usuario, ordenar los numeros del array y comparar si el numero i es igual al anterior (como estan ordenados los numeros iguales estaran en posiciones i y i+1):
El array numeros es el array que el user nos pasa (que no se como se hace, en cualquier caso da igual el numero de numeros que haya en el array)
Arrays.sort(numeros); // Los ordenamos para hacer la comparación que he comentado antes
for(int i = 1; i < numeros.length; i++) { // recorremos todo el array
if(numeros[i] == numeros[i - 1]) { // Comparamos si i es igual a su anterior
System.out.println("Se repite el num: " + numeros[i]); // mostramos en pantalla
}
}
Última edición por micosil12; 03/12/2014 a las 20:01
-
ForoParalelo: Miembro
Iniciado por
micosil12
Utilizar dos bucles para este ejercicio me parece un poco excesivo, una alternativa es coger el array al usuario, ordenar los numeros del array y comparar si el numero i es igual al anterior (como estan ordenados los numeros iguales estaran en posiciones i y i+1):
El array numeros es el array que el user nos pasa (que no se como se hace, en cualquier caso da igual el numero de numeros que haya en el array)
Arrays.sort(numeros); // Los ordenamos para hacer la comparación que he hecho antes
for(int i = 1; i < numeros.length; i++) { // recorremos todo el array
if(numeros[i] == numeros[i - 1]) { // Comparamos si i es igual a su anterior
System.out.println("Se repite el num: " + numeros[i]); // mostramos en pantalla
}
}
Efectivamente, funciona ordenándolos antes, no se me había ocurrido
-
ForoParalelo: Miembro
Añadimos la funcionalidad que has comentado (que no se repitan), nos ayudamos de un array vacio en el que meteremos los numeros repes:
Arrays.sort(numeros); // Los ordenamos para hacer la comparación que he comentado antes
int[] repes; //Desconozco si en java le tienes que decir que tamaño tiene que tener
int k = 0; // Contador
for(int i = 1; i < numeros.length; i++) { // recorremos todo el array
if(numeros[i] == numeros[i - 1]) { // Comparamos si i es igual a su anterior
if (!Arrays.asList(repes).contains(i)){ // Añadimos la funcionalidad de no imprimir numeros que ya
System.out.println("Se repite el num: " + numeros[i]); // mostramos en pantalla
repes[k] = i;
k++;
}
}
}
Revisa las declaraciones ya que no tengo ni idea de como se declara en java.
-
FP never forget~
No se demasiado de java, pero podrías tener un array de pairs (si es que en java se podían hacer), es decir, para cada posición del array tendrás el número y un booleano que te indicará si se ha repetido más de una vez o no, y que para cada número que introduzcas mire si ya está metido, si no lo está pones el booleano a true y así sabrás que ese número está repetido almenos una vez.
Si además lo metes en una estructura como una cola de prioridad o simplemente llamas a alguna función para que te lo ordene puedes usar una búsqueda dicotómica para reducir considerablemente el tiempo de búsqueda.
Pero no sé cuál es tu nivel de programación
-
ForoParalelo: Miembro
Iniciado por
Zap2x
No se demasiado de java, pero podrías tener un array de pairs (si es que en java se podían hacer), es decir, para cada posición del array tendrás el número y un booleano que te indicará si se ha repetido más de una vez o no, y que para cada número que introduzcas mire si ya está metido, si no lo está pones el booleano a true y así sabrás que ese número está repetido almenos una vez.
Si además lo metes en una estructura como una cola de prioridad o simplemente llamas a alguna función para que te lo ordene puedes usar una búsqueda dicotómica para reducir considerablemente el tiempo de búsqueda.
Pero no sé cuál es tu nivel de programación
Estoy cursando primero de DAM (Ciclo superior de desarrollo de aplicaciónes multiplataforma), y estoy en primer curso .
Sobre lo que dices,
-
FP never forget~
-
ForoParalelo: Miembro
Iniciado por
zorex
Estoy haciendo un ejercicio en el que me dicen que muestre los numeros que se han introducido mas de una vez en un array.
¿Alguna idea?
¡Gracias!
si no lo has solucionado, ahi esta.
en las pruebas que hice funciono, igual se puede reducir codigo pero creo que asi esta bien.
import java.util.*;
public class NumRep {
private Scanner leer;
int[] v1=new int[10];
ArrayList a=new ArrayList();
void numeros(){
leer = new Scanner(System.in);
System.out.println("Introduce 10 numeros: ");
for(int i = 0;i<v1.length;i++){
v1[i]=leer.nextInt();
for(int j=0;j<i;j++){
if(v1[i]==v1[j]){
if(!a.contains(v1[i])){
a.add(v1[i]);
}
break;
}
}
}
System.out.print("Numeros repetidos: ");
for(int i=0;i<a.size();i++){
System.out.print(a.get(i)+", ");
}
}
public static void main (String args[]) {
NumRep num=new NumRep();
num.numeros();
}
}
-
AutoBanned
Última edición por Usuario335120615; 04/12/2014 a las 10:31
Permisos de publicación
- No puedes crear nuevos temas
- No puedes responder temas
- No puedes subir archivos adjuntos
- No puedes editar tus mensajes
-
Reglas del foro
▲
▼
Atajos de Navegación Disponibles