Autor Tema: CU00669B Arrays o arreglos Java. Ejemplos, de objetos y tipos primitivos; length  (Leído 3596 veces)

Lorenzo31

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 381
    • Ver Perfil
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

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

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


Lorenzo31

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 381
    • Ver Perfil
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,
Código: [Seleccionar]
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,

Código: [Seleccionar]
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 ;)
« Última modificación: 29 de Marzo 2015, 13:09 por Lorenzo31 »

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 393
    • Ver Perfil
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.

Citar
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!!

Lorenzo31

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 381
    • Ver Perfil
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.


 

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