Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Lorenzo31 en 28 de Marzo 2015, 21:20
-
Buenas noches, aquí mi solución del programa, comentar que uso un random para asignar posición de la array al mesSecreto y poco más he cambiado.
Clase EntradaDatos
import java.util.Scanner;
public class EntradaDatos{
public EntradaDatos(){ /*vacio*/ }
public String recogerString(){
String palabra = "";
do{
Scanner escaner = new Scanner(System.in);
//como solo es una palabra recojo con next() no nextLine()
palabra = escaner.next();
}while (palabra.isEmpty() );
return palabra;
}
}
Clase GestorMeses (main)
import java.util.Random;
public class GestorMeses{
public static void main(String[] args){
//Declaro y asigno los meses al String meses
String [] meses = new String [12];
meses[0] = "enero"; meses [1] = "febrero"; meses[2] = "marzo"; meses[3] = "abril"; meses[4]="mayo;";
meses[5] = "junio"; meses [6] = "julio"; meses[7] = "agosto"; meses[8] = "septiembre"; meses[9] = "octubre";
meses[10] = "noviembre"; meses[11] = "diciembre";
//Declaracin String mesSecreto a adivinar
String mesSecreto;
//Declaro un new de la clase Random para generar aleatoriamente un int que corresponda a las posiciones de la array
Random numero = new Random();
//Declaro un new de la clase EntradaDatos para recoger la palabra introducida
EntradaDatos entrada = new EntradaDatos();
//Declaro y asigno false boolean semaforo para salir del bucle
boolean semaforo = false;
//Asignación
mesSecreto = meses [numero.nextInt(12)];
System.out.println("Iniciamos el programa... ");
System.out.println(" \n \n Introduce el nombre de un mes para adivinar el Mes Secreto");
while(semaforo == false){
if(mesSecreto.equalsIgnoreCase(entrada.recogerString())){ System.out.println("Has acertado!!"); semaforo = true;
}else { System.out.println(" No ha adivinado. Prueba introduciendo otro mes. \n "); }
}
System.out.println (" \n \n Finalizando el programa... Final");
}
}
-
Buenos días, estaba contento con mi ejercicio anoche, pero revisando los de otros compañeros, veo que la declaración de Array es correcta si defino el tamaño por defecto como yo hice (sin el new no deja).
Pero que para acerlo en una sola linea sin definir array fijo sería,
String [] meses = {"enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"};
La asignación de valores esta clara, lo de no poner el new String [] , no sé a que se debe,mi pregunta;
Puede ser porque la clase String ya está cargada por defecto y no requiere imports ni un new ?
Y si es así, porque es obligatorio el new String[Slot] cuando le indicamos un número fijo determinado. Ejemplo String[] meses = new String[12];
También vi una solución del while que ahorraba el boolean semaforo que yo uso y debo recordarla para más adelante,
while(!mesSecreto.equalsIgnoreCase(entrada.recogerString())){
System.out.println(" No ha adivinado. Prueba introduciendo otro mes. \n ");
}
System.out.println("Acertaste!!!");
se queda en el bucle mientras NO sea igual mes secreto a lo introducido.
Gracias de antemano como siempre, por la ayuda y la resolución de dudas, problemas y meteduras de pata ;)
-
Hola Lorenzo tu código esta correcto. En vez de semaforo podrías haber usado un nombre más relacionado con lo que haces, por ejemplo adivinado.
La asignación de valores esta clara, lo de no poner el new String [] , no sé a que se debe
Respuesta: se debe a que es una sintaxis especial que permite Java. Esto lo decidieron los creadores de Java que fuera así, es una forma más compacta para crear arrays. Cuando tengas que crear un array así es más rápido usar la forma compacta.
Esto es otra sintaxis: String[] meses = new String[12];
Siempre tienes que seguir las normas de sintaxis de java, lo que pasa es que a veces se permite hacer una misma cosa de distintas maneras.
Lo de ahorrar el semáforo o no puede que esté bien o puede que no: ten en cuenta que a veces es preferible escribir una línea o dos más y que el programa sea más claro que no escribir una línea menos y que el programa no se entienda
Saludos!!
-
Buenas Javi in the Sky, ok sobre lo de la sintaxis de Java, me queda claro, cuando sea un array fijo va con new, sino se puede inicializar sin new por asignación como una variable primitiva.
Y si el semaforo fue un nombre que poco indica, lo tendré presente, también lo de codigo claro, no por sintetizarlo más es mas fácil su lectura.
Gracias por los comentarios y aclaraciones javi in the sky.