Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Problema con Do - While[Newbie]

Hola, buenos días y gracias por ayudarme con mi problema :)

Soy nuevo en Java, estoy aprendiendo con el libro Como programar en Java de deitel, ya estoy en el capítulo 8 de 30 xD

Verán el problema es este:

Escriba una aplicación que simule el lanzamiento de monedas. Deje que el programa lance una moneda cada vez que el usuario seleccione la opción del menú “Lanzar moneda”. Cuente el número de veces que aparezca cada uno de los lados de la moneda. Muestre los resultados. El programa debe llamar a un método separado, llamado tirar, que no tome argumentos y devuelva falseen caso de cara, y true en caso de cruz.

Bueno pues he estado realizando el código, pero tengo un problema con el do -while, se supone que el do debe interpretar el final de ese bloque al encontrar el ";" seguido del while.

El código del do-while lo he hecho en un método aparte, pero al intentar cerrar el método con la llave de cierre, la llave cierra la llave del do "{", lanzando así errores.

Uso Netbeans y DrJava, Por favor disculpen si la duda les parece muy tonta, recién estoy aprendiendo.

Les dejo el code:

package juegomoneda;

import java.util.Scanner;
import java.util.Random;

public class LanzarMoneda {

private int cara;
private int cruz;
Scanner t = new Scanner(System.in);

public void jugar()
{
// creamos la variable que represente la primera decision(opc)
String opc;

bienvenida(); // llamamos al metodo bienvenida para que de la bienvenida al usuario

// pedimos que se elija una opcion
System.out.println("Eliga una opcion");
System.out.println("Escriba 'L' para lanzar la moneda o");
System.out.println("Escriba 'S' para salir");
opc = t.nextLine();

// si la opcion elegida es 'Salir' imprimimos un mensaje de salida
if("S".equals(opc))
{
System.out.println("Ha decido salir");
System.out.println("No se inicio el juego");

// si la opcion elegida es 'Lanzar' tiramos la moneda
if("L".equals(opc))
{
// llamamos al metodo tirar que devuelve true si cae cara o false si cae cruz
// almacenamos el resultado en la variable boolean resultado, si el valor devuelto
// es true, aumentamos cara en 1, y si es false aumentamos cruz en 1

boolean resultado = tirar();
if(resultado == true)
cara++;
else
cruz++;

}
segundoTiro();

}
}

// metodo que da la bienvenida al juego

public void bienvenida()
{
System.out.println("Bienvenido al juego 'Lanza la moneda'");
}

// metodo tirar, tira una moneda, si cae cara devuelve true, si cae cruz devuelve false

public boolean tirar()
{
Random generadorAleatorio = new Random();
int moneda = 1 + generadorAleatorio.nextInt(2);

if(moneda == 1)
return true;
else
return false;
}

public void segundoTiro()
{
String opc2;
boolean resultado;

do{
// y preguntamos al usuario si quiere lanzarla nuevamente

System.out.println("Desea Lanzar la moneda otra vez");
System.out.println("'Y' para si y 'N' para no");
opc2 = t.nextLine();

if("Y".equals(opc2)){
// Hacemos lo mismo, llamar al metodo tirar y aumentar si es cara o cruz
resultado = tirar();
if(resultado == true)
cara++;
else
cruz++;}
while("Y".equals(opc2)); // Se repite el lanzamiento mientras la opcion elegida sea //'Si, Lanzar'

// Si despues del 1er tiro el usuario no quiere seguir jugando, imprimimos un //mensaje de salida
// e imprimimos los resultados del juego

if("N".equals(opc2))
{
System.out.println("Ha decido salir");
System.out.println("Usted saco "+cara+ "caras y "+cruz+" cruces");
}
} // Esta llave debería indicar el fin del método segundoTiro
} // Y esta el fin de la clase

febrero 7, 2013 | Unregistered CommenterMickyX

Edit:

Cometí una barbaridad, omití la llave de cierra del do xD, además puse llaves a todos los if-else aunaque sean de una sola línea para mejorar la legibilidad :)

Así quedó el code, disculpen las molestias ^ ^

import java.util.Scanner;
import java.util.Random;

public class LanzarMoneda {

private int cara;
private int cruz;
Scanner t = new Scanner(System.in);

public void jugar()
{
// creamos variables que representen la primera decision(opc) y las posteriores(opc2)
String opc;
bienvenida(); // llamamos al metodo bienvenida para que de la bienvenida al usuario

// pedimos que se elija una opcion
System.out.println("Eliga una opcion");
System.out.println("Escriba 'L' para lanzar la moneda o");
System.out.println("Escriba 'S' para salir");
opc = t.nextLine();

// si la opcion elegida es 'Salir' imprimimos un mensaje de salida
if("S".equals(opc))
{
System.out.println("Ha decido salir");
System.out.println("No se inicio el juego");
}

// si la opcion elegida es 'Lanzar' tiramos la moneda
if("L".equals(opc))
{
// llamamos al metodo tirar que devuelve true si cae cara o false si cae cruz
// almacenamos el resultado en la variable boolean resultado, si el valor devuelto
// es true, aumentamos cara en 1, y si es false aumentamos cruz en 1
boolean resultado = tirar();

if(resultado == true)
{
cara++;
}
else
{
cruz++;
}

}
segundoTiro();

}

// metodo que da la bienvenida al juego

public void bienvenida()
{
System.out.println("Bienvenido al juego 'Lanza la moneda'");
}

// metodo tirar, tira una moneda, si cae cara devuelve true, si cae cruz devuelve false
public boolean tirar()
{
Random generadorAleatorio = new Random();
int moneda = 1 + generadorAleatorio.nextInt(2);

if(moneda == 1)
{
System.out.println("Usted saco cara!");
return true; }

else
{
System.out.println("Ustes saco cruz!");
return false; }
}
public void segundoTiro()
{
String opc2;
boolean resultado;

do{
// y preguntamos al usuario si quiere lanzarla nuevamente
System.out.println("Desea Lanzar la moneda otra vez? Y - Si, N - no");
opc2 = t.nextLine();

if("Y".equals(opc2)){
// Hacemos lo mismo, llamar al metodo tirar y aumentar si es cara o cruz
resultado = tirar();
if(resultado == true)
{
cara++;
}
else
{
cruz++;}}
}while("Y".equals(opc2)); // Se repite el lanzamiento mientras la opcion elegida sea 'Si, Lanzar'
// Si despues del 1er tiro el usuario no quiere seguir jugando, imprimimos un mensaje de salida
// e imprimimos los resultados del juego
if("N".equals(opc2))
{
System.out.println("Ha decido salir");
System.out.println("Usted saco "+cara+ " veces cara y "+cruz+" veces cruz");
}
}
}

febrero 7, 2013 | Unregistered CommenterMickyX