Autor Tema: Arrays o arreglos Java. Tipos de colecciones (CU00669B) ejercicio resuelto  (Leído 4625 veces)

adrit

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 59
    • Ver Perfil
Hola, dejo mi codigo para el ejercicio CU00669B

Citar
EJERCICIO

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.

Código: [Seleccionar]
import java.util.Scanner;
import java.util.Random;

public class Test {

    public static void main (String[] args) {
        System.out.println("Adivina el mes secreto");
        pedirMes();
    }

    public static void pedirMes() {
        String[] mesesAño = {"enero", "febrero", "marzo", "abril", "mayo", "junio",
                "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"};
        Random numeroRandom = new Random();
        int mesSecreto = numeroRandom.nextInt(12); //asignamos numero aleatorio a mesSecreto
        Scanner miScanner;
        System.out.println("\nIngresa un mes");
        miScanner = new Scanner(System.in);
       
        while (!miScanner.nextLine().equalsIgnoreCase(mesesAño[mesSecreto])) {
            System.out.println("Incorrecto, intenta de nuevo ingresando otro mes");
            miScanner = new Scanner(System.in);
        }
        System.out.println("Correcto!");
        System.out.println("\nFin de programa");
    }
}

Muchas gracias!
« Última modificación: 16 de Julio 2015, 20:22 por adrit »

RaGa

  • Moderador Global
  • Intermedio
  • *******
  • APR2.COM
  • Mensajes: 234
    • Ver Perfil
Hola Adrián:

Está muy bien tu ejercicio, felicitaciones! Muy bien usada la clase Random.

Ten en cuenta como creo lo hemos conversado en otro hilo, en programación tratamos de evitar el uso de la letra 'ñ' para nombrar atributos, clases o métodos. Así, palabras como 'año' las escribimos como 'anno' o 'anio'.

Saludos, a seguir adelante!

adrit

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 59
    • Ver Perfil
Hola RaGa!!

Tomo nota de tus observaciones, gracias.

Me gustaría hacer una consulta:

Que sucede cuando creamos el mismo objeto repetidas veces?

Por ejemplo, en el código de este ejercicio vemos en la linea 3 que estamos creando un objeto miScanner. Luego en la linea 6 volvemos a crear el mismo objeto (supongo que es el mismo ya que la variable apuntadora es del mismo tipo y tiene el mismo nombre).
Esto se repite en varios códigos de ejercicios que he hecho y no me da ningún error.
Cual es el comportamiento de java ante esta situación?

Código: [Seleccionar]
      1)  Scanner miScanner;
      2)  System.out.println("\nIngresa un mes");
      3)  miScanner = new Scanner(System.in);
      4)  while (!miScanner.nextLine().equalsIgnoreCase(mesesAnio[mesSecreto])) {
      5)     System.out.println("Incorrecto, intenta de nuevo ingresando otro mes");
      6)     miScanner = new Scanner(System.in);
      7)  }

Ademas, me dí cuenta que la linea 6 puede no estar en el código, pero no quería sacarla sin antes hacer esta consulta.

Gracias!

Saludos!

RaGa

  • Moderador Global
  • Intermedio
  • *******
  • APR2.COM
  • Mensajes: 234
    • Ver Perfil
Hola Adrián !

Es muy interesante la pregunta.
Hay una equivocación de concepto en lo que dices, pero igual está muy bien y celebro esta clase de análisis que estás haciendo.
He de decirte que no se crea dos veces el mismo objeto. Analicemos un poco...

El campo de instancia miScanner (tipo Sacanner) se declara una sola vez, en la línea 1.

En la línea 3 lo que hacemos es inicializarlo.
Y detengámonos un poco a pensar en que consiste esa inicialización: consiste en asignarle la referencia de un objeto nuevo que estamos creando.
La línea:

Código: [Seleccionar]
new Scanner(System.in);
crea un nuevo objeto tipo Scanner, correcto?... Y esa referencia es asignada al atributo miScanner.

En la línea 6 hacemos exactamente lo mismo: creamos un nuevo objeto escribiendo

Código: [Seleccionar]
new Scanner(System.in);
y a la referencia de ese objeto (objeto anónimo, es decir sin nombre) se la asignamos al atributo miScanner.

Conclusión: La línea 1 declara el atributo (el campo de instancia). Y las líneas 3 y 6 son sentencias de asignación. Claro que lo que asignamos son REFERENCIAS de objetos que creamos en la misma línea.

Te agrego unos pasos intermedios (eviatando la utilización de objetos anónimos) para que sea más gráfico el procedimiento, fíjate:

Código: [Seleccionar]
1)  Scanner miScanner;
      2)  System.out.println("\nIngresa un mes");
      2.4) Scanner objetoTeclado 1;
      2.5) objetoTeclado1 = new Scanner(System.in);
      3)  miScanner = objetoTeclado1;
      4)  while (!miScanner.nextLine().equalsIgnoreCase(mesesAnio[mesSecreto])) {
      5)     System.out.println("Incorrecto, intenta de nuevo ingresando otro mes");
      5.4) Scanner objetoTeclado2;
      5.5) objetoTeclado2 = new Scanner (System.in);
      6)    miScanner = objetoTeclado2;
      7)  }

Analízalo con detenimiento y cualquier duda estamos aquí para reveerlo. Saludos!

adrit

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 59
    • Ver Perfil
Muy clara tu explicación.

Gracias.

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