Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: momo en 23 de Septiembre 2014, 04:40
-
Bueno amigos aquí les dejo esta entrega cualquier observación serán tomada en cuenta
ENUNCIADO:
/*Crea una clase con el método main donde declares una variable de tipo array de Strings que
* contenga los doce meses del año, en minúsculas y declarados en una sola línea. A continuación
* declara una variable mesSecreto de tipo String, y hazla igual a un elemento del array
* (por ejemplo mesSecreto = mes[9]. El programa debe pedir al usuario que adivine el
* mes secreto y si acierta mostrar un mensaje y si no pedir que vuelva a intentar adivinar
* el mes secreto. Puedes comprobar si tu código es correcto consultando en los foros
* aprenderaprogramar.com.
Un ejemplo de ejecución del programa podría ser este:
Adivine el mes secreto. Introduzca el nombre del mes en minúsculas: febrero
No ha acertado. Intente adivinarlo introduciendo otro mes: agosto
No ha acertado. Intente adivinarlo introduciendo otro mes: octubre
¡Ha acertado!
import java.util.Scanner;
public class AdivinarMes
{
public static void main(String[] args)
{
String entrada="",mesSecreto="";
boolean intentos=true;
String mesDelAño[]={"enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"};
mesSecreto=mesDelAño[12-1];//--->La posicion de la array mesDelAño siempre sera la misma al momento de compilar . Cambia si le modificamos el valor
//mesSecreto=mesDelAño[(int)(Math.random() * 12)]; //----> utilizando el metodo Math.radom() siempre va a variar o a cambiar la posicion del array mesDelAño
System.out.println("!Adivina el Mes!. Introdusca el Mes en Letra Miniscula : ");
Scanner teclado=new Scanner(System.in);
entrada=teclado.nextLine();
while(intentos==true)
{
if(entrada.equalsIgnoreCase(mesSecreto))
{
System.out.println("Ha Acertado..!!");
break;
}else
{
System.out.println("Ha Fallado. Intente Adivinarlo Introduciendo Otro Mes :");
entrada=teclado.nextLine();
intentos=true;
}
}
System.out.println("Adios..!!");
}
}
-
Hola momo
Tu código es correcto y funciona como es debido.
Pero tu comentario
mesSecreto=mesDelAño[12-1];//--->La posicion de la array mesDelAño siempre sera la misma al momento de compilar . Cambia si le modificamos el valor
//mesSecreto=mesDelAño[(int)(Math.random() * 12)]; //----> utilizando el metodo Math.radom() siempre va a variar o a cambiar la posicion del array mesDelAño
no es correcto
El array mesDelAño es una variable de tipo Array que una vez inicializada, ocupa la misma posición de memoria. En realidad el nombre: mesDelAño internamente es sustituido por la dirección/ubicación en la memoria de la computadora y que siempre será la misma mientras exista la variable mesDelAño
Lo que si puede cambiar en nuestro programa es la dirección de la variable mesSecreto, que unas veces puede apuntar a la dirección del primer mes o a la del segundo, etc...
Saludos
-
Otra observación momo: la forma de salida del bucle no es la más adecuada (al menos desde el punto de vista de un buen estilo de programación).
La condición de entrada al bucle es: while(intentos==true)
Sin embargo esta condición no controla el funcionamiento verdadero del bucle, ya que la variable intentos siempre vale true (mal diseño de código: el bucle no evoluciona, tiene diseño de bucle infinito).
En realidad la salida del bucle la controlas con:
if(entrada.equalsIgnoreCase(mesSecreto))
{
System.out.println("Ha Acertado..!!");
break;
}
Mal diseño: controlar la salida de un bucle con un break cuando puedes hacerlo sin problemas mediante la condición del bucle.
La idea de usar un booleano es buena, pero fíjate cómo está hecho aquí: https://www.aprenderaprogramar.com/foros/index.php?topic=1355
El booleano debe evaluarse dentro del bucle y cambiar cuando se cumple una determinada condición, de modo que el bucle se cierre "de forma natural" y no a través de un break (forma forzada).
Saludos
-
Para: ALEX RODRIGUEZ
Bueno gracias amigo por lo que me dijiste del bucle while lo modificare y lo realizare de otra manera.
Para : Toni_apr
Bueno amigo en realidad si di un mal concepto sobre esa variable pensé que escribiendo eso se me entendería con que se puede cambiar la dirección de la variable mesSecreto .
Entonces un buen Concepto seria lo que me diste como observación
Lo que si puede cambiar en nuestro programa es la dirección de la variable mesSecreto, que unas veces puede apuntar a la dirección del primer mes o a la del segundo, etc...
Muchas Gracias ...