Spelling Bee Random Words. Capítulo Dos. El Primer Vuelo

Sobre cómo logré cargar las palabras desde un archivo a un ArrayList, le di la calidad de Random al programa y otras aventuras dignas de ser contadas

La primera vez nos quedamos apenas en la interfaz y dejamos pendiente el diccionario donde alojaríamos las palabras, pues bien, manos a la obra:

Llenamos un archivo de texto que llamaremos “dictionary” con 10 palabras:

firewall
biome
imagination
communicate
essential
equation
communicate
environment
tongue
knowledge

A continuación creamos la clase Dictionary donde habrá un ArrayList de Strings que llamaremos wordList y con ayuda de su constructor le descargaremos las palabras una por una con el método readLine(), no hay que preocuparse mucho por los imports, Netbeans se pone guapo y nos echa una mano:

ArrayList<String> wordList = new ArrayList<String>();
public Dictionary(String nameFile) {
	String aux;
	try{
		BufferedReader box = new BufferedReader(new FileReader(nameFile));
		for(int a = 0; (aux = box.readLine()) != null; a++) {
			wordList.add(aux);
		}
		box.close();
	} catch (java.io.FileNotFoundException e) {
		e.printStackTrace();
	} catch (java.io.IOException e) {
		e.printStackTrace();
	}
}

Pero no sólo eso, también creamos una función seeWord() que al pasarle como parámetro un entero, consultará el objeto wordList para que nos devuelva la palabra que está en esa posición (está función nos es útil después):

	public String seeWord(int position) {
		return wordList.get(position);
	}

Ahora que ya podríamos tener las palabras en memoria primaria es hora de imprimirlas en pantalla, eso nos obliga a regresar a la clase MainBee donde declararemos las siguientes variables:

private Dictionary dic = null;
private int position;
private Timer timer;
private File file = null;

Seguramente te estás preguntando ¿Para que nos sirve la variable file? Veamos el siguiente método para salir de dudas:

    private void newDicActionPerformed(java.awt.event.ActionEvent evt) {
        final JFileChooser fc = new JFileChooser();
        int flag = fc.showOpenDialog(MainBee.this);

        if (flag == JFileChooser.APPROVE_OPTION){
            file = fc.getSelectedFile();
            dic = new Dictionary(file.toString());
        }
    }

Tal y como lo sospechaste, la variable file almacena el diccionario elegido por el usuario. Con ayuda de la clase JFileChooser esto es pan comido. Con el NetBeans creamos un ActionPerformed del sub-menú Open Dictionary cuya variable tiene el nombre newDic. A continuación se ejecuta una instancia de JFileChooser que nos permite crear un objeto de tipo Dictionary a partir del archivo que seleccionemos, en este caso “dictionary.txt”. Seguramente te has dado cuenta que ese objeto es asignado a dic que antes declaramos.

Y es entonces cuando podremos terminar (at least!) con el método run() de la clase interna flyBee:

class flyBee extends TimerTask {
	public void run(){
		if(!dic.wordList.isEmpty()){
			int random = new Random().nextInt(dic.wordList.size());
			printer.setText(dic.seeWord(position = random));
		} else {
			JOptionPane.showMessageDialog(null, "There are no more words");
			timer.cancel();
		}
	}
}

Preguntamos si nuestro diccionario tiene palabras ¿Las tiene? Entonces… Ojo, recordad que nuestro programa tiene que ser Random, creamos un número aleatorio entre cero y el tamaño de wordList menos la unidad, sacamos el String con el índice de wordList y printer toma su valor.

Ahora bien, si wordList está vacio, entonces le decimos al usuario There are no more words y finalizamos el timer… ¡Ah Caray! ¿Cuándo inicializamos el timer? No lo hemos hecho, esa es nuestra siguiente tarea…

En la tercera entrega veremos cómo queda la lógica del programa finalmente y seguiremos viendo cómo se desarrollaron los hechos de las primeras rondas del concurso...

2 comentarios sobre “Spelling Bee Random Words. Capítulo Dos. El Primer Vuelo

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s