usar Scanner para leer entrada
Sé que se puede usar la clase Scanner para leer una entrada desde la línea de comandos (consola). Se hace de la siguiente manera (ejemplo para leer números tipo int):
public class Main {
public static void main(String[] args) {
System.out.println ("Ingresa numero tipo int");
Scanner source = new Scanner (System.in);
if (source.hasNextInt()) {
System.out.println ("Has ingresado un int");
}
else {
System.out.println ("NO Has ingresado un int");
}
}
}
Lo que quiero saber es: ¿Se puede utilizar un Scanner para leer desde un diálogo (...JOptionPane.showInputDialog) de igual manera?
- Inicie sesión o regístrese para enviar comentarios
Scanner
Scanner es para entrada desde consola aqui te dejo algo Sobre Console vs Dialog(JOptionPane)I/O.
Java:Console Vs Dialog(JOptionPane
Espero te sirva y comprendas.
Saludos.
Sccaner
Muchas gracias por responder. Quiero que mi programa reciba cierto tipo de dato, y de no introducir el tipo de dato requerido (ejemplo: int), enviar un mensaje de error; y luego permitir al usuario reintentar. ¡Gracias!
Se escribe Scanner
1.- En Java puedes declarar la variable e inicializarla al mismo tiempo por lo que podrías cambiar tu código por algo así:
//hacemos la declaracion de tipo String
//String xVal, yVal, zVal;
//pedimos al usuario ingresar los valores enteros
String xVal = JOptionPane.showInputDialog("Escriba primer entero:");
String yVal = JOptionPane.showInputDialog("Escriba segundo entero:");
String zVal = JOptionPane.showInputDialog("Escriba tercer entero:");
//convertimos las variables String a variables int
int x = Integer.parseInt(xVal);
int y = Integer.parseInt(yVal);
int z = Integer.parseInt(zVal);
// en la siguiente linea calculamos el producto de los tres enteros
int resultado = x * y * z;
JOptionPane.showMessageDialog(null,"El producto es:" + resultado);
System.exit(0);
Que, luce casi igual, pero al menos resulta un poquitito más fácil identificar donde es usada una variable.
2.- Si tienes funcionalidad repetida, puedes crear un método. Aunque de nuevo, en tu código puede parecer exagerado hacer lo siguiente, en un pedazo de código más grande puede valer la pena: "Extraer un método"
Por ejemplo en tu código estas a) tomando información del usuario y b) convirtiendola en un entero. Para ello estás creando tres variables de string temporales ( xVal, yVal y zVal ) y tres variables de int temporales ( x,y, Y z ) ... si usas un método para obtener esa información puedes eliminar esas variables temporales.
return Integer.parseInt( JOpeiontPane.showInputDialog( message ) );
}
Tu código final puede verse así:
public class Producto {
public static void main (String [] args ){
//iniciamos el calculo de los enteros
// en la siguiente linea calculamos el producto de los tres enteros
int resultado = getIntValue("Escriba primer entero:") *
getIntValue("Escriba segundo entero:") *
getIntValue("Escriba tercer entero:")
JOptionPane.showMessageDialog(null,"El producto es:" + resultado);
}
private static String getIntValue( String message ) {
return Integer.parseInt( JOptionPane.showInputDialog( message ) );
}
}
De esta forma, si quisieras agregar validaciones como también sugiere Jaime, podrías poner la validación en ese nuevo método y no tener que ensuciar el método principal o tener que hacer copy/paste de alguna validación, por ejemplo para forzar a que el usuario introduzca un entero puedes cambiar el método así:
String value = "";
while( ! ( value = JOptionPane.showInputDialog(message)).matches("\\d+"));
// este while se lee así:
// mientras el valor regresado por el joption pane, no "matchee" o coincida
// con uno o más enteros
// vuelvelo a pedir.
return Integer.parseInt( value );
}
O también podrías usar un componente que ya haga la validación, todo, sin tener que cambiar la función que lo llama.
Por último, el System.exit(0); puede omitirse, por default es el valor con el que termina Java.
Espero que esto te sirva... chau!!!
Este Ejemplo Fue proporcionado por un Miembro de la Comunidad @OscarRyz
Y este es el link Explicación