elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  tengo un bucle infinito conmigo, HELP!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: tengo un bucle infinito conmigo, HELP!  (Leído 3,095 veces)
sowi12

Desconectado Desconectado

Mensajes: 39


Ver Perfil
tengo un bucle infinito conmigo, HELP!
« en: 27 Agosto 2015, 16:16 pm »

Hola!!! Ya se que será alguna chorrada el fallo pero no hago más que tener un bucle:

Introduzca números no letras!
Introduzca una edad:
Introduzca números no letras!
Introduzca una edad:
Introduzca números no letras!
Introduzca una edad:
..... Así hasta el fin de los tiempos.

El código es este:

Código
  1. public static int pideInt(String texto) {
  2.        Scanner teclado = new Scanner(System.in);
  3.        boolean correct = false;
  4.        int n = 0;
  5.        do {
  6.            try {
  7.                System.out.println(texto);
  8.                n = teclado.nextInt();
  9.                correct = true;
  10.            } catch (InputMismatchException e) {
  11.                System.out.println("Introduzca números no letras!");
  12.            }
  13.        } while (correct == false);
  14.        return n;
  15.    }

Y se pide desde este constructor:
Código
  1. public Empleado() {
  2.        nombre = Pantalla.pideCadena("Introduzca un nombre: ");
  3.        edad = Pantalla.pideInt("Introduzca una edad: ");
  4.        sueldo = Pantalla.pideFloat("Introduzca un sueldo: ");
  5.    }
(las variables están declaradas tranquilos)

La cuestión es que tiene que pedir la edad, y si introduces una letra que te salte el
error y que posteriormente te vuelva a pedir que escribas la edad.

Tengo ejercicios con el mismo constructor y no tengo bucles infinitos, ha
sido añadir la excepción e irse todo al garete  :-\ :-\

Si no estáis muy ocupados...  :xD :xD

Gracias por adelantado  ;D


« Última modificación: 13 Septiembre 2015, 19:26 pm por Eleкtro » En línea

EndlessLoop

Desconectado Desconectado

Mensajes: 12



Ver Perfil WWW
Re: tengo un bucle infinito conmigo, HELP!
« Respuesta #1 en: 5 Septiembre 2015, 03:23 am »

No estoy seguro, pero creo que el while esta causando eso, porque veo que el boolean correct es true todo el tiempo.


En línea

Visita mi blog de tecnologia! 0101tecnologia.tk/blog

boolean EndlessLoopMLG = true
if(EndlessLoopMLG ==true){
System.out.Printin("EndlessLoop es MLG")
}
DeMoNcRaZy


Desconectado Desconectado

Mensajes: 420


$~*|_


Ver Perfil
Re: tengo un bucle infinito conmigo, HELP!
« Respuesta #2 en: 5 Septiembre 2015, 03:44 am »

Prueba así:

Código
  1. public static int pideInt(String texto) {
  2.        Scanner teclado = new Scanner(System.in);
  3.        boolean correct;
  4.        int n = 0;
  5.        do {
  6.            try {
  7.                System.out.println(texto);
  8.                n = teclado.nextInt();
  9.                correct = true;
  10.            } catch (InputMismatchException e) {
  11.                System.out.println("Introduzca números no letras!");
  12.            }
  13.        } while (correct == true);
  14.        return n;
  15.    }
  16.  
  17. Y se pide desde este constructor:
  18. public Empleado() {
  19.        nombre = Pantalla.pideCadena("Introduzca un nombre: ");
  20.        edad = Pantalla.pideInt("Introduzca una edad: ");
  21.        sueldo = Pantalla.pideFloat("Introduzca un sueldo: ");
  22.    }
  23.  

No sé si es exactamente lo que busca, esto lo que hace es repetir el bucle se realice o no dicha acción.

De igual modo coméntanos.

Saludos.
En línea

Esta página web no está disponible - Google Chrome
sowi12

Desconectado Desconectado

Mensajes: 39


Ver Perfil
Re: tengo un bucle infinito conmigo, HELP!
« Respuesta #3 en: 13 Septiembre 2015, 18:40 pm »

Siento la tardanza XD,

Si pongo eso me salta el error de que he puesto letras en vez de números pero no repite el pedir la edad, salta directamente a pedir un sueldo.

Y si sólo pongo boolean correct;, me pide que inicialice la variable.
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: tengo un bucle infinito conmigo, HELP!
« Respuesta #4 en: 13 Septiembre 2015, 19:24 pm »

¿Casi un año registrado en el foro y todavía no formateas apropiadamente los códigos que publicas? ...espero ver una mejora en eso (o el siguiente post podría acabar en la basura). Lee las normas del subforo de programación, por favor.



No estoy muy convencido pero ¿cabría la posibilidad de que el problema tal vez pueda deberse al propio búcle de tipo "do-while"?, más que nada lo comento por que la expresión se evalua al final del bloque y no al principio cómo hace un "while" corriente, y en mi opinión algo grave parece suceder con ese tipo de mecanismo del do-while para que se genere una extraña iteración infinita que parece imperceptible a simple vista, ya que todo parece estar bien en tu código y en el de @YuseTist ...al menos para mi. Quien tenga mejor conocimiento de los internals de Java que me corrija, ya que no estoy seguro de si puede ser eso el fallo.

Aparte de la modificación del tipo de búcle while, he mejorado la lógica del algoritmo y el control de errorres, se obtiene la linea de entrada por parte del usuario y seguidamente parseo el string obtenido utilizando el método apropiado para ello, Integer.parseInt.

De este modo todo parece funcionar cómo es debido:

Código
  1. import java.util.InputMismatchException;
  2. import java.util.Scanner;
  3.  
  4. class HelloWorld{
  5.  
  6.    public static void main(String []args){
  7.        HelloWorld.inputInt("Input an Integer value: ");
  8.    }
  9.  
  10.    public static int inputInt(String message) {
  11.  
  12.        Scanner scan = new Scanner(System.in);
  13.        int n = 0;
  14.  
  15.        while (n == 0){
  16.  
  17.            System.out.println(message);
  18.  
  19.            try {
  20.                n = Integer.parseInt(scan.nextLine());
  21.  
  22.            } catch(NumberFormatException ex){
  23.                System.out.println("Its not a valid Integer value.");
  24.  
  25.            } finally {
  26.                // ...
  27.            }
  28.  
  29.        }
  30.  
  31.        scan.close();
  32.        return n;
  33.    }
  34.  
  35. }

El código lo desarrollé y lo testeé de manera online:
http://www.tutorialspoint.com/compile_java_online.php

De todas formas también te digo que eso que haces de definir 3 métodos diferentes para llevar a cabo practicamente la misma tarea (pedir un string y comprobar si es un string, un int, o un float) es un desprovecho de las características y ventajas que te ofrece el lenguaje que estás utilizando, lo que podrías hacer es un método genérico y según el data-type que le pases a la función manejas ese mismo type (o lo devuelves en una función), al principio tu método diempre debe obtener un string del user-input claro está pero puedes especificar un type-parameter en la firma del método genérico y castear/parsear el string obtenido a ese type o devolver ese type, teniendo solamente un método definido en lugar de 3.
Lee sobre Generics en Java, debe ser algo fácil.

PD: No manejo Java en absoluto, solo para defenderme en cosas básicas cómo esta, no puedo proporcionarte mejor ayuda.

Saludos
« Última modificación: 13 Septiembre 2015, 20:06 pm por Eleкtro » En línea



sowi12

Desconectado Desconectado

Mensajes: 39


Ver Perfil
Re: tengo un bucle infinito conmigo, HELP!
« Respuesta #5 en: 14 Septiembre 2015, 12:44 pm »

Lo del formateo me lo dices a mí?? :huh: :huh:

Si tu ejemplo está muy bien, pero tal y como me han enseñado a mí (que o lo hago como piden los profesores que tengo o ni me lo miran), tu ejemplo no encajan "con sus enseñanzas" por lo que se ve.

Y ya te digo que soy una "recién nacida en esto" así no esperen que descubran el santo grial conmigo.

Acepto sugerencias para así saber más cosas, pero si me pueden ayudar a solucionarlo dentro de lo que cabe este código (O lo que sea esto XDD), os lo agradecería muchísimo.

Lo gordo es que un día lo hice así y me salio a la primera (Como este no sería porque este va mal XDD).
« Última modificación: 14 Septiembre 2015, 14:14 pm por Eleкtro » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: tengo un bucle infinito conmigo, HELP!
« Respuesta #6 en: 14 Septiembre 2015, 14:14 pm »

Si tu ejemplo está muy bien, pero tal y como me han enseñado a mí (que o lo hago como piden los profesores que tengo o ni me lo miran), tu ejemplo no encajan "con sus enseñanzas" por lo que se ve.

¿En que difiere el ejemplo funcional que te he mostrado, a cómo quieren los profesores que lo resuelvas?, ¿te han mandado expresamente que utilices un do-while, o a que te refieres exactamente?, no somos adivinos.

¿Has probado a usar un do-while en vez de un while en el código que mostré?.

PD: Si, lo del formato de código fue un comentario que iba dirigido a ti, por que es una norma del subforo que se debe cumplir.

Saludos
En línea



0roch1

Desconectado Desconectado

Mensajes: 123



Ver Perfil
Re: tengo un bucle infinito conmigo, HELP!
« Respuesta #7 en: 15 Septiembre 2015, 22:17 pm »

Hay muchísimas formas de resolver el problema, ya comentaron algunas formas pero si no indicas que se tiene que resolver con una estructura especifica o utilizando ciertas palabras reservada nada más nunca ibamos a llegar a lo que querías.

Ahora bien, partiendo de tu código original agrega la línea que indico a continuación.

Código
  1. } catch (InputMismatchException e) {
  2.                System.out.println("Introduzca números no letras!");
  3.                teclado.nextLine(); //Consumir Enter
  4.            }
  5.  


La razón del bucle infinito es que cuando intentas ingresar una entrada y pulsar "Enter" este (Enter) es tomado en cuenta por el scanner al llamar a nextInt. De ahí que cuando ingresas un número no válido se obtiene la excepción y scanner obtiene "Enter" nuevamente porque no ha sido consumido, por lo tanto nunca sale de este bloque.

Espero haberme explicado.

Saludos.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
probando un bucle infinito... « 1 2 3 »
Bugs y Exploits
mousehack 22 16,407 Último mensaje 28 Agosto 2015, 21:46 pm
por MCKSys Argentina
El que se ha metido en un bucle infinito soy yo...
Programación C/C++
Superplay 0 4,013 Último mensaje 1 Diciembre 2010, 21:14 pm
por Superplay
Implementacion de bucle infinito
Programación C/C++
mark182 3 4,824 Último mensaje 12 Marzo 2011, 11:33 am
por Akai
Bucle infinito interumpible
Programación C/C++
soyloqbuskas 3 3,019 Último mensaje 23 Agosto 2012, 01:06 am
por 0xDani
Bucle infinito y hilos en C
Programación C/C++
soyloqbuskas 3 4,750 Último mensaje 25 Octubre 2012, 15:46 pm
por 0xDani
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines