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
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.
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
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.
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.
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.