Autor Tema: CU00669B condición de salida de un bucle while java  (Leído 3778 veces)

momo

  • Principiante
  • **
  • Mensajes: 64
    • Ver Perfil
CU00669B condición de salida de un bucle while java
« en: 23 de Septiembre 2014, 04:40 »
Citar
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!

 



Código: [Seleccionar]
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..!!");

    }
}



« Última modificación: 23 de Septiembre 2014, 11:33 por Alex Rodríguez »

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Re:CU00669B
« Respuesta #1 en: 23 de Septiembre 2014, 08:07 »
Hola momo
Tu código es correcto y funciona como es debido.
Pero tu comentario

Citar
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

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2049
    • Ver Perfil
Re:CU00669B
« Respuesta #2 en: 23 de Septiembre 2014, 11:33 »
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

momo

  • Principiante
  • **
  • Mensajes: 64
    • Ver Perfil
Re:CU00669B condición de salida de un bucle while java
« Respuesta #3 en: 24 de Septiembre 2014, 03:24 »
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
 
Citar
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 ...

 

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