Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: adrit en 16 de Julio 2015, 17:36
-
Hola, dejo mi codigo para el ejercicio CU00669B
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.
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!
-
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!
-
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?
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!
-
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:
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
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:
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!
-
Muy clara tu explicación.
Gracias.
Saludos