[Novato] Problema con do-while en codigo sencillo

Iniciado por Mitsu, 7 Febrero 2013, 20:54 PM

0 Miembros y 1 Visitante están viendo este tema.

Mitsu

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.


Code:

Código (java) [Seleccionar]
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


BatchianoISpyxolo

#1
No he leído el código en absoluto, simplemente he corregido un error de sintaxis que tú mismo sabías y deberías haber corregido :P

Procura identar el código y seguir un estilo al programar. La tarea de programar no trata sólo de escribir líneas de código.

¡Saludos! y si no te funciona trata de averiguar por qué y, lo más importante, trata de solventarlo por ti mismo ;)

Código (java) [Seleccionar]
package juegomoneda;

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

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

Puede que desees aprender a programar desde 0: www.espascal.es

Mitsu

Lol! Ya veo, fue un error de sintaxis, debía de haber cerrado la llave del do xD


Salu2 y gracias ;D

Debci