Foros del Web » Programación » Java »

Bucle de menú en modo consola

Estas en el tema de Bucle de menú en modo consola en el foro de Java en Foros del Web. Hola a todos, Estoy iniciandome en Java, y estoy haciendo una pequeña aplicación que suma, resta, multiplica y divide dos números enteros solicitados al usuario. ...
  #1 (permalink)  
Antiguo 10/12/2008, 05:05
 
Fecha de Ingreso: diciembre-2008
Mensajes: 13
Antigüedad: 5 años, 7 meses
Puntos: 0
Bucle de menú en modo consola

Hola a todos,

Estoy iniciandome en Java, y estoy haciendo una pequeña aplicación que suma, resta, multiplica y divide dos números enteros solicitados al usuario. Al final debe preguntar si se quiere ejecutar de nuevo el programa.
Lo intento hacer con un do while, se compila correctamente pero luego me hace la pregunta, no me deja que conteste y finaliza el programa. Alguna idea?.

Gracias de antemano:

Ahí va el código:

import java.io.*;

class calculadora1
{


public static void main(String[] args) throws IOException
{
char seleccion = 's';
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));

do
{

System.out.print("Por favor, escriba un numero entero a continuacion: ");
int entero1 = Integer.parseInt(stdin.readLine());
System.out.println("Ha introducido el "+entero1);
//Hasta aqui hemos introducido el primer numero.

System.out.print("Ahora escriba un segundo numero entero: ");
int entero2= Integer.parseInt(stdin.readLine());
System.out.println("Ha introducido el "+entero2);
/*Ahora hemos introducido el segundo numero y nos disponemos a pedir al usuario la operación a realizar*/

System.out.print("Por favor, especifique la operacion que desea realizar:\n\n- Suma (s)\n- Resta (r)\n- Multiplicacion (m)\n- Division (d)\n\nIntroduzca

opcion: ");
char opcion = (char) System.in.read();

System.out.println("Ha seleccionado: "+opcion);
//Ya tenemos capturada la opción.

switch(opcion)
{
case 's': int suma = entero1 + entero2;
System.out.println("La suma de los dos numeros introducidos da "+suma);
break;

case 'r': int resta = entero1 - entero2;
System.out.println("La resta de los dos numeros introducidos da "+resta);
break;

case 'd': float enteroI = entero1;
float enteroII = entero2;

float division = enteroI / enteroII;
System.out.println("La division de los dos numeros introducidos da "+division);
break;

case 'm': int producto = entero1 * entero2;
System.out.println("La multiplicacion de los dos numeros introducidos da "+producto);
break;

default: System.out.println("No ha escrito ninguna opcion valida.");
}
System.out.print("Desea realizar una nueva operacion? (s/n): ");
seleccion = (char) System.in.read();

} while (seleccion == 's');


}
}
  #2 (permalink)  
Antiguo 10/12/2008, 07:39
 
Fecha de Ingreso: diciembre-2008
Mensajes: 7
Antigüedad: 5 años, 7 meses
Puntos: 0
Respuesta: Bucle de menú en modo consola

El error es un poco extraño si mal no recuerdo se debia a que cuando haces un read(), el enter que das al final se queda en el aire xq espere a la siguiente lectura, pues lee las pulsaciones de tecla de una en una, por lo que deberias usar siempre readLine, podria modificar la linea de seleccion de la opcion por esta

char opcion = stdin.readLine().charAt(0);

y la lectura de la opcion final por esta

seleccion = stdin.readLine().charAt(0);

con eso me parece se solucionara tu error

Suerte...
  #3 (permalink)  
Antiguo 10/12/2008, 08:44
 
Fecha de Ingreso: diciembre-2008
Mensajes: 13
Antigüedad: 5 años, 7 meses
Puntos: 0
Respuesta: Bucle de menú en modo consola

En primer lugar gracias por tu interés.

La selección de opciones funciona correctamente, el problema surge en la opción final, donde se pregunta al usuario si quiere ejecutar de nuevo el programa.
He probado a sustituirla por la línea que me has sugerido pero me da un error:

Desea realizar una nueva operacion? (s/n): Exception in thread "main" java.lang.
StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(Unknown Source)
at calculadora1.main(calculadora1.java:56)
  #4 (permalink)  
Antiguo 11/12/2008, 03:29
 
Fecha de Ingreso: diciembre-2008
Mensajes: 13
Antigüedad: 5 años, 7 meses
Puntos: 0
Respuesta: Bucle de menú en modo consola

Ya lo he resuelto. Por si a alguien le interesa lo hice así:

import java.io.*;

class calculadora1
{
public static String seleccion = "";

public static void main(String[] args) throws IOException
{
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
do
{

System.out.print("Por favor, escriba un numero entero a continuacion: ");
int entero1 = Integer.parseInt(stdin.readLine());
System.out.println("Ha introducido el "+entero1);
//Hasta aqui hemos introducido el primer numero.

System.out.print("Ahora escriba un segundo numero entero: ");
int entero2= Integer.parseInt(stdin.readLine());
System.out.println("Ha introducido el "+entero2);
/*Ahora hemos introducido el segundo numero y nos disponemos a pedir al usuario la
operación a realizar*/

System.out.print("Por favor, especifique la operacion que desea realizar:\n\n- Suma (1)\n- Resta (2)\n- Multiplicacion (3)\n- Division (4)\n\nIntroduzca opcion: ");
int opcion = Integer.parseInt(stdin.readLine());

System.out.println("Ha seleccionado: "+opcion);
//Ya tenemos capturada la opción.

switch(opcion)
{
case 1: int suma = entero1 + entero2;
System.out.println("La suma de los dos numeros introducidos da "+suma);
break;

case 2: int resta = entero1 - entero2;
System.out.println("La resta de los dos numeros introducidos da "+resta);
break;

case 4: float enteroI = entero1;
float enteroII = entero2;

float division = enteroI / enteroII;
System.out.println("La division de los dos numeros introducidos da "+division);
break;

case 3: int producto = entero1 * entero2;
System.out.println("La multiplicacion de los dos numeros introducidos da "+producto);
break;

default: System.out.println("No ha escrito ninguna opcion valida.");
}
System.out.print("Pulse s si desea continuar o cualquier tecla para salir: ");
seleccion = stdin.readLine();

} while (seleccion.equals("s"));
System.out.println("\nHasta pronto!");

}
}

Saludos!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:29.
SEO by vBSEO 3.3.2