Foros aprenderaprogramar.com
Aprender a programar => De todo un poco... => Mensaje iniciado por: Stiv en 15 de Noviembre 2017, 15:27
-
Buenos días, necesito saber como hago para que en un vector de java no se me repitan dos numeros, tengo esto:
int [] vector = new int [9];
for(h=0;h<vector.length;h++){
System.out.println("Ingrese cédula");
while (!sc.hasNextInt()){
System.out.println("no se puede digitar letras");
sc.next();
}
vector[h]=sc.nextInt();
}
que peudo hacer para que en ese vector no haya dos numeros iguales?, muchas gracias.
-
No te queda otra opción que, cada vez que recojas el dato por teclado, antes de guardarlo en el vector hagas un recorrido previo del vector comprobando si ya existe o no ese mismo dato.
Si no existe, lo guardas y pasas a pedir el siguiente.
Si existe, informas por pantalla de que el valor ya existe y vuelves a pedirlo.
Hay varias formas de gestionar esto, la más cómoda y elegante sería escribir un método (una función) por separado que devolviera true o false según si el dato ya existe o no dentro del vector.
Pero como estás empezando y quizás aún no has empezado a trabajar con métodos (programación modular), se puede hacer también valiéndote de una variable booleana y un bucle que compruebe si el dato está repetido.
Intentando mantener el código que ya has escrito...marco en rojo los cambios y en verde los comentarios explicativos
int [] vector = new int [9];
for(h=0;h<vector.length;h++){
System.out.println("Ingrese cédula");
boolean repetido = true;//Inicializamos en true, de lo contrario, no se ejecutará el bucle while
int cedula;
while (!sc.hasNextInt() || repetido){
System.out.println("no se puede digitar letras");
sc.next();
cedula = sc.nextInt();
//Comprobamos si la cedula ya existe.
//Es necesario asegurarnos que la variable "repetido" comienza con valor false
repetido = false;
for(j=0; j<vector.length; j++){
if (vector[j] == cedula)
repetido = true;//Solo cambia a true si se encuentra el dato repetido
}
/* Terminado el for de comprobacion, si "repetido" ha adquirido valor true
* se cumplirá la condición del while y este se repetirá pidiendo el dato de
* nuevo.
* En cambio, si "repetido" conserva el valor false, el bucle while terminará y
* ahora sí podemos guardar la cedula en el vector, pues ya se ha
* comprobado que no está repetido.
}
vector[h]=cedula;
}
No lo he probado, pero en teoría debería funcionar.
Pregunta cualquier cosa que no hayas entendido, te parezca rara.. o lo que sea.
-
Hola Kabuto, gracias por responder, la verdad es que sí, apenas estoy empezando a programas, cuando hago esto:
boolean repetido = true;
int cedula;
while (repetido){
System.out.println("Está repetido");
cedula = sc.nextInt();
repetido=false;
for(j=0; j<vector.length; j++){
if (vector[j] == cedula)
repetido = true;
}
}
en el vector, no me deja pasar ya que en el primer dígito me aparece de una que ya está repetido cuando no he ingresado ningún otro dato.
Muchas gracias
-
El mensaje de System.out está puesto en un sitio que puede llevar a confusión, ya que SIEMPRE informa de que está repetido, cuando en realidad aún no ha pedido ningún dato siquiera.
Lo ideal sería que ese mensaje estuviera DENTRO del if donde comparamos números de cédulas:
boolean repetido = true;
int cedula;
while (repetido){
System.out.println("Está repetido");
cedula = sc.nextInt();
repetido=false;
for(j=0; j<vector.length; j++){
if (vector[j] == cedula){
System.out.println("Está repetido");
repetido = true;
}
}
}