ARGENTOP2P

Soporte, Ayuda y Consultas => Programación en General => Mensaje publicado por: pela_pmcba en Mayo 14, 2009, 02:16:57

Título: (AYU) Verificar que un digito ingresado es un numero en java
Publicado por: pela_pmcba en Mayo 14, 2009, 02:16:57
hola gente, ando necesitando algo de ayuda con programacion en java (nivel basico), la cosa es bastante facil y se me hace que me estoy olvidando alguna boludes nomas...

Lo que necesito hacer es que verificar si un caracter ingresado por teclado es un numero, si es una letra me tiene que pedir nuevamente el caracter, para lo cual estoy usando un ciclo do-while, pero no hace lo que necesito, aca dejo el codigo que utilizo


do{
     System.out.print("Ingrese el diametro de la tuerca: ");
     diam=In.readDouble();
     }
while(diam>='0'&&diam<='9');


claro esta que la variable diam ya esta declarada como double antes, puse asi porque en un momento nos mostraron en la facu un programita para meter numeros hasta que se ingrese un caracter, cuando se ingresaba un caracter seguia el programa (en ese caso terminaba, yo necesito que siga)
aca dejo el programita que les mensiono:
package dowhile01;


public class Main {
    public static void main(String[] args) {
        char dig;
        do{
            System.out.println("un digito: ");
            dig=In.readChar();}
        while(dig>='0'&&dig<='9');
        System.out.println("demo terminado");
    }
}


y otra cosa que no me gusta de ese codigo es que si ingreso por ejemplo 12 me escribe en la salida:  "un digito:" tantas veces como caracteres ingrese, cuando en realidad tendria que aparecer una sola ves

no se si me exprese bien, espero que si...


Saludos
Pablon
Título: Re: (AYU) Verificar que un digito ingresado es un numero en java
Publicado por: Predicador en Mayo 14, 2009, 06:40:41
hola, 
en el primer codigo, fijate que usas In.readDouble(), por ende es para hacer el ingreso por teclado del tipo Double (en fin, los numeros reales).
La comparacion del while deberia ser while(diam>=0 && diam<=9); ya que si los pones a los numeros con comillas quiere decir que son texto y no numeros.
Ahora deberias poder ingresar 9 o 8,1 o 0,56 pero nunca un numero mas grande que 9 (por la condicion del while).

El segundo ejemplo, lee de a un caracter a la vez (por usar In.readChar()) y ademas fijate que dig es de tipo char (o sea, un caracter).
Siempre debes poner mucha atencion en los tipos de datos que estas leyendo, comparando y lo que sea que hagas con una variable; algunos lenguajes tiene conversion dinamica de tipos, da mas flexibilidad pero tambien complica la comprension y el debugging.
Título: Re: (AYU) Verificar que un digito ingresado es un numero en java
Publicado por: pela_pmcba en Mayo 14, 2009, 16:48:36
gracias predicador...lo que decis lo entiendo y en el caso del primer while lo puse asi para probar, porque lo que necesito es que repita el ciclo cuando ingreso un dato no numerico, es decir si yo ingreso "jds" tiene que volver al pedirme el digito, pero si yo ingreso "1", "2,23" o 223,332" me tendria que guardar ese numero en la variable diam, no se si me explico, yo lo que necesito validar es que cada digito ingresado es un numero y no una letra por ejemplo...

Saludos
Pablon
Título: Re: (AYU) Verificar que un digito ingresado es un numero en java
Publicado por: hardrocker en Mayo 14, 2009, 19:26:50
Seguramente haya alguna funcion sencilla para comprobar si un valor es numérico o no.
En Javascript por ejemplo tenés isNaN()... supongo que tambien existirá para Java.
Título: Re: (AYU) Verificar que un digito ingresado es un numero en java
Publicado por: Predicador en Mayo 15, 2009, 04:18:32
Hola,
Primero que nada estas confundiendo digito con numero, un numero esta compuesto por uno o varios digitos.
Lo mas facil es leer el numero usando readLn() y guardarlo en un string, luego usas la funcion isNumber() (http://www.icee.usm.edu/ICEE/Projects/P-0301-03-S_(Blake_Howe)/docs/jdocs/naturalpackage/Isnumber.html) para determinar si es un numero o no; si isNumber() devuelve false entonces repetis el loop.
Algo asi (medio en pseudo-codigo):

String strDiam;
Integer diam;
do{
     System.out.print("Ingrese el diametro de la tuerca: ");
     strDiam=In.readLn();
     }
while (not isNumber(strDiam));
diam = strDiam.toString;


Se deberia mejorar para que muestre un mensaje de error si lo ingresado no es un numero y cosas asi.
Si queers hacer ingreso digito a digito, debes encargarte vos de que cada caracter que entra esta entre 0 y 9, ademas de aceptar un punto (o coma) e ir comoniendo el numero; me parece trabajo extra siendo que existen metodos para e ingreso de numeros y cadenas de caracteres.
Baii.
Título: Re: (AYU) Verificar que un digito ingresado es un numero en java
Publicado por: elrosti en Mayo 15, 2009, 14:37:06
pela_pmcba: Podes hacer lo siguiente.

String diam;

do{
     System.out.print("Ingrese el diametro de la tuerca: ");
     diam=In.readln(); // no recuerdo como es el nombre del metodo
     }                      // exactamente, pero se entiende :P.
while(!isDouble(diam));

double dblDiam = Double.parseDouble(diam);


Funcion isDouble


public boolean isDouble(String cadena){
       try {
            Double.parseDouble(cadena);
            return true;
       } catch (NumberFormatException nfe) {
             // no es Double
             return false;
       }
}


Saludos.

PD:Quizas ya hay alguna clase OpenSource con metodos para hacer este tipo de cosas, no se si estará la clase "suelta" pero seguro en algun proyecto openSource alguien escribió una clase para esto.