Autor Tema: Pregunta de java  (Leído 4428 veces)

Stiv

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Pregunta de java
« 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.

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re:Pregunta de java
« Respuesta #1 en: 15 de Noviembre 2017, 20:30 »
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

Citar
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.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

Stiv

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Re:Pregunta de java
« Respuesta #2 en: 15 de Noviembre 2017, 21:55 »
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

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re:Pregunta de java
« Respuesta #3 en: 16 de Noviembre 2017, 11:57 »
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:

Citar
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;
                    }
                }
                }
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".