Autor Tema: Java diferencia entre poner línea dentro o fuera de bucle while ejemplo CU00672B  (Leído 2459 veces)

Bettu

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 28
    • Ver Perfil
Hola, Envio el ejercicio resuelto CU00672B del curso de programación online con Java.

Aguardo los comentarios.

Muchas gracias.

Código: [Seleccionar]

/**
 * TestAdivinaNumero
 * Bettu
 * 28/09/2016
 */

import java.util.Random;
public class TestAdivinaNumero
{
    public static void main (String[] Args) {
        Integer tmpInteger = 0;
        EntradaDeTeclado entradaMain = new EntradaDeTeclado();
       
        char tecla = 'S';
        int numeroAAdivinar;
       
        Random numAleatorio = new Random();
        numeroAAdivinar = numAleatorio.nextInt(100);

        System.out.println("Se ha generado un número aleatorio entre 1 y 100, intente adivinarlo");
        // Agregue esta linea para probar el programa
        System.out.println("El numero aleatorio es: " + numeroAAdivinar);
       
        while (tecla == 'S') {
            System.out.print("Por favor introduzca su número: ");
            entradaMain.pedirEntrada();
            tmpInteger = tmpInteger.valueOf(entradaMain.getEntrada());
            if (tmpInteger == numeroAAdivinar){
                System.out.println("Felicitaciones el número aleatorio es "+numeroAAdivinar);
                break; }
            else if (tmpInteger < numeroAAdivinar) {
                System.out.println("No has acertado: el número es mayor");}
            else {  System.out.println("No has acertado: el número es menor");}
       
            tecla=' ';
            System.out.println("\n Intenta de Nuevo(S/N): ");
            while (tecla != 'n' && tecla != 'N' && tecla != 's' && tecla != 'S') {
                entradaMain.pedirEntrada();
                if (entradaMain.getEntrada().equals("n") || (entradaMain.getEntrada().equals("N")))
                    {tecla = 'N';}
                else if (entradaMain.getEntrada().equals("s")|| (entradaMain.getEntrada().equals("S")))
                    {tecla = 'S';}
            }
        }
        System.out.println("Gracias por Jugar!!");
    }
}

Clase de EntradaDeTeclado - Clase para pedir los datos desde el teclado
Código: [Seleccionar]
import java.util.Scanner;

public class EntradaDeTeclado
{
    // instance variables - replace the example below with your own
    private String entradaTeclado;

    public EntradaDeTeclado()
    {
        entradaTeclado = ""; }

    public void pedirEntrada() {
        Scanner entradaEscaner = new Scanner(System.in);
        entradaTeclado = entradaEscaner.nextLine();
    }
   
    public String getEntrada() {
        return entradaTeclado; }
   
}
« Última modificación: 01 de Octubre 2016, 18:37 por Alex Rodríguez »

ESOJ

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 143
    • Ver Perfil
Re:Java - Adivinar número Random - Ejercicio CU00672B
« Respuesta #1 en: 29 de Septiembre 2016, 05:49 »
Buenos días.

El ejercicio en general es correcto y da el resultado que se pide aunque yo cambiaria algún detalle en la clase TestAdivinaNumero.

1º Quitaría la línea  System.out.println("El numero aleatorio es: " + numeroAAdivinar);
     ya que estas mostrando el número a adivinar antes de que haya que adivinarlo.Me imagino que la pondrías para hacer pruebas.

2º La variable tmpInteger la declaras como Integer.Yo la declararía como int y
cambiaría la línea tmpInteger = tmpInteger.valueOf(entradaMain.getEntrada()); por tmpInteger = Integer.valueOf(entradaMain.getEntrada()); funcionaría igual consumiendo menos recursos.

3º La línea System.out.println("\n Intenta de Nuevo(S/N): "); la metería dentro del while.Dejándola fuera,como la pusiste,si en la ejecución el usuario responde algo diferente de s o n el programa espera que se vuelva a responder pero no aparece la pregunta,con lo que puede llevar al usuario a pensar que el programa terminó.

4º Para no diferenciar entre mayúscula o minúscula utiliza equalsIgnoreCase.En vez de
if (entradaMain.getEntrada().equals("n") || (entradaMain.getEntrada().equals("N")))
puedes poner
 if (entradaMain.getEntrada().equalsIgnoreCase("n"))  ahorrando código.

Código: [Seleccionar]
/**
 * TestAdivinaNumero
 * Bettu
 * 28/09/2016
 */

import java.util.Random;
public class TestAdivinaNumero
{
    public static void main (String[] Args) {
        int tmpInteger = 0;
        EntradaDeTeclado entradaMain = new EntradaDeTeclado();

        char tecla = 'S';
        int numeroAAdivinar;

        Random numAleatorio = new Random();
        numeroAAdivinar = numAleatorio.nextInt(100);

        System.out.println("Se ha generado un número aleatorio entre 1 y 100, intente adivinarlo");
        // Agregue esta linea para probar el programa
        //       System.out.println("El numero aleatorio es: " + numeroAAdivinar);

        while (tecla == 'S') {
            System.out.print("Por favor introduzca su número: ");
            entradaMain.pedirEntrada();
            tmpInteger = Integer.valueOf(entradaMain.getEntrada());
            if (tmpInteger == numeroAAdivinar){
                System.out.println("Felicitaciones el número aleatorio es "+numeroAAdivinar);
                break; }
            else if (tmpInteger < numeroAAdivinar) {
                System.out.println("No has acertado: el número es mayor");}
            else {  System.out.println("No has acertado: el número es menor");}

            tecla=' ';
           
            while (tecla != 'n' && tecla != 'N' && tecla != 's' && tecla != 'S') {
                System.out.println("\n Intenta de Nuevo(S/N): ");
                entradaMain.pedirEntrada();
                if (entradaMain.getEntrada().equalsIgnoreCase("n"))
                {tecla = 'N';}
                else if (entradaMain.getEntrada().equalsIgnoreCase("s"))
                {tecla = 'S';}
            }
        }
        System.out.println("Gracias por Jugar!!");
    }
}

Un saludo


Bettu

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 28
    • Ver Perfil
Re:Java - Adivinar número Random - Ejercicio CU00672B
« Respuesta #2 en: 29 de Septiembre 2016, 19:24 »
Muchas gracias por vuestra respuesta. Me has enseñado algunos puntos interesantes.
Saludos :)

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".