Autor Tema: Java juego adivinar mes o número secreto preguntando al usuario CU00669B  (Leído 5387 veces)

ronal.d87

  • Principiante
  • **
  • Mensajes: 72
    • Ver Perfil
Hola a todos, he aqui el desarrollo del ejercicio planteado.

Código: [Seleccionar]
package ejemplo;

import java.util.Scanner;

public class TestArray {
   
    public TestArray(){
        //Constructor general
    }
   
    public static void main (String args[]){
       
       String[] meses  = {"enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre"
       ,"octubre","noviembre","diciembre"};//array que contiene meses del año
       //declaracion de variables
       String mesSecreto;
       Scanner adivina, valor;
       int val = 0;
       //inicializacion de variables
       mesSecreto = new String ();
       mesSecreto = "";
       //ingrese un valor para asignar el valor meses a mesSecreto
       System.out.println("ingresa un numero del 0 al 11");
       valor = new Scanner(System.in);       
       val = valor.nextInt();
       
       mesSecreto = meses [val];
       //introduce un nombre de un mes
       System.out.print("introduzca el nombre del mes en minuscula");
       adivina = new Scanner(System.in);       
       adivina.nextLine();
       
        //condicion que evalua la informacion ingresada
        while(true){
            if(mesSecreto.equals(adivina.nextLine())){
                System.out.println("\033[032mFelicitaciones, has acertado");
                System.exit(0);
            }else if(!mesSecreto.equals(adivina)){
                System.out.println("\033[31mNo has acertado, intentalo de nuevo");
            }
        }
    }
   
}

« Última modificación: 16 de Julio 2015, 10:25 por Alex Rodríguez »
Ronald Mosquera Mancilla

RaGa

  • Moderador Global
  • Intermedio
  • *******
  • APR2.COM
  • Mensajes: 234
    • Ver Perfil
Re:EJERCICIO CU00669B REALIZADO
« Respuesta #1 en: 05 de Julio 2015, 18:12 »
Hola Ronal:

Estuve revisando tu ejercicio, y como puntos positivos marcaremos: un correcta inicialización del array, la inclusión de la elección del mes (a adivinar) por parte del usuario, lo cual evidencia en su codificación un mayor entendimiento en el uso del array.

Asimismo señalaremos también algunos conceptos a tener en cuenta que son importantes:

1) El atributo mesSecreto está declarado en una línea, en otra línea se lo inicializa con la sentencia 'new', y en otra línea se le asigna su valor por defecto.
A diferencia de mesSecreto, declaras e inicializas en una misma línea el atributo val.
Pienso que deberías hacer lo mismo entonces con el atributo mesSecreto también, para simplificar el código. Recuerda que los objetos tipo String pueden ser inicializados de una manera más simple, y en este caso en particular bien podríamos declararlo, inicializarlo, y asignarle su valor por defecto con la siguiente línea de código:

Código: [Seleccionar]
String mesSecreto = "";
2) Defines dos atributos tipo Scanner, y bien podríamos haber definido uno solo y utilizarlo cuando sea necesario: primero esperando recibir el mes elegido por el usuario (un valor tipo int), y luego para recibir el intento de adivinación (un valor tipo String).

También relacionado con esto, la consola nos presenta un mensaje diciéndonos que ingresemos un mes en mínusculas. Y la siguiente línea a ejecutarse es:

Código: [Seleccionar]
adivina.nextLine();
en esa línea el programa se queda esperando que ingresemos una cadena String que luego no es usada, no es tenido en cuenta el mes que introducimos en ese pedido. Esta línea no debería existir.

3) Realizar un:

Código: [Seleccionar]
while(true){
no es buena idea, ya que nos obligaría a tener que usar alguna forma de salida que en la mayoría de los casos habría que tratar de evitar (como los break).
Que se entienda bien: los break son una forma válida y lícita de salir de un bucle, pero antes de que hagamos uso de esta sentencia (o de la forma que usaste), deberíamos agotar la posibilidad de salir del bucle while de una manera más elegante y limpia. Esa manera es aquella que evalúe la condición que consignamos entre los paréntesis del while.



Reescbribo tu ejercicio teniendo en cuenta estos puntos que te he mencionado para que lo analices.

Código: [Seleccionar]
package ejemplo;

import java.util.Scanner;

public class TestArray {
   
    public TestArray(){
        //Constructor general
    }
   
    public static void main (String args[]){
       
       String[] meses  = {"enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre"
       ,"octubre","noviembre","diciembre"};//array que contiene meses del año

       //declaracion e inicializacion de variables
       Scanner valor = new Scanner(System.in);
       int val = 0;
       String mesSecreto = "";

       //elección del mesSecreto
       System.out.println("\fIngresa un numero del 0 al 11");
       val = valor.nextInt();
       valor.nextLine(); // esta línea sirve para limpiar el buffer.
       mesSecreto = meses [val];
       
       
       //introduce el nombre de un mes
       System.out.print("Introduzca el nombre del mes en minuscula: ");
       
       //condicion que evalua la informacion ingresada
        while(!mesSecreto.equals(valor.nextLine())){
            System.out.println("No has acertado. \nIntentalo de nuevo: ");
        }

        System.out.println("Felicitaciones, has acertado");
       
    } // fin de main
   
} // fin de la clase

Analiza el código y cualquier duda estamos aquí para revisarlo nuevamente.

ronal.d87

  • Principiante
  • **
  • Mensajes: 72
    • Ver Perfil
Hola, pido que me excusen por la dilacion en la respuesta, no fue oportuna de mi parte!! Pero bueno. gracias por las recomendaciones he aqui el nuevo codigo

Código: [Seleccionar]
package ejemplo;

import java.util.Scanner;

public class TestArray {
   
    public TestArray(){
        //Constructor general
    }
   
    public static void main (String args[]){
       
       String[] meses  = {"enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre"
       ,"octubre","noviembre","diciembre"};//array que contiene meses del año
       //declaracion de variables
       String mesSecreto = "";
       Scanner valor = new Scanner(System.in);
       int val = 0;
       
       //ingrese un valor para asignar el valor meses a mesSecreto
       System.out.println("ingresa un numero del 0 al 11");
       val = valor.nextInt();
       valor.nextLine();//limpiamos el Buffer
       
       mesSecreto = meses [val];

       //introduce un nombre de un mes
       System.out.println("introduzca el nombre del mes en minuscula");
               
       //condicion que evalua la informacion ingresada
       while(!mesSecreto.equals(valor.nextLine())){
            System.out.println("No has acertado. \nIntentalo de nuevo: ");
        }
       
       System.out.println("Felicitaciones, has acertado");
    }
   
}
Ronald Mosquera Mancilla

RaGa

  • Moderador Global
  • Intermedio
  • *******
  • APR2.COM
  • Mensajes: 234
    • Ver Perfil
Hola Ronal:

Está muy bien tu ejercicio. A seguir adelante entonces!

 

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".