sábado, 12 de abril de 2008

Practicas de Java

En estos días estaba buscando un poco de información sobre el proceso de certificación Web para java, y entre la busqueda me encontre con el sitio Java BlackBelt: Un repositorio bastante extenso de preguntas sobre temas relacionados en su mayoría con Java que te permite practicar con exámenes en circunstancias parecidas a las de un exámen de certificación real.

El sitio ofrece material de muy buena calidad y un sistema de clasificación bastante interesante.

domingo, 6 de abril de 2008

Ejercicio 2. Aproximaciones de Newton

Implemente en un programa el esquema de solución de raices cuadradas por aproximaciones de Newton. Para hacer esto seguir el siguiente algoritmo.


  1. Tome un valor aleatorio para x. A este valor lo llamaremos f0

  2. Calcular a = f02 - numero

  3. Calcular b = 2f0

  4. Calcular f1 = f0 - (a / b)

  5. Volver al paso 1, está vez usando f1 para calcular f2.Repetir hasta que el resultado sea igual al valor f



Para una mejor referencia visita la wikipedia

Ejercicio 1. Solución: Contador

Continuamos con la solución: Para poder crear una lista de números nos valdremos de un sencillo arreglo de cadenas que sea una variable de clase; además agregaremos una bandera para indicar si el proceso debe seguir contando.


public class Exercise1 extends JFrame {
private JLabel numberLabel = null;
private JButton stopButton = null;
private boolean shouldContinue = true;

private static String[] numbers = new String[] {"1", "7", "15", "3", "9", "0"};

//Mas contenido
}


Después vamos a crear una clase que implemente Runnable para poder convertir el proceso de conteo en un hilo, la clase quedaría como una clase interna más o menos así:


class Counter implements Runnable {
private int index = 0;

public void run() {
while(shouldContinue) {
if(index == numbers.length)
index = 0;
numberLabel.setText("" + numbers[index++]);
try {
Thread.sleep(500);
} catch(InterruptedException ie) { ; }
}
};
}


Agregamos al constructor de la clase un método para arrancar el ciclo, y al botón un método para detenerlo:


stopButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
shouldContinue = false;
}
});

new Thread(new Counter()).start();


La solución estaría completa.

Para seguir...



  1. Describe el método usado para evitar errores cuando el proceso del contador duerme.

  2. ¿Qué ventajas y desventajas presenta el hecho de declarar la seríe de números estática?

  3. ¿Porqué nunca se llama al método run del contador?

  4. Elabore una lista con las formas de llamar al método deriveFont.

  5. Describe como podría implementarse la clase del contador dentro del constructor de la solución.

  6. Describe como podría implementarse la clase ActionListener del botón fuera del constructor.

  7. Implemente un método para que la lista de valores se llene de manera aleatoria.



Clase completa



import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;


public class CounterSolution extends JFrame {
private JLabel numberLabel = null;
private JButton stopButton = null;
private boolean shouldContinue = true;

private static String[] numbers = new String[] {"1", "7", "15", "3", "9", "0"};

class Counter implements Runnable {
private int index = 0;

public void run() {
while(shouldContinue) {
if(index == numbers.length)
index = 0;
numberLabel.setText("" + numbers[index++]);
try {
Thread.sleep(500);
} catch(InterruptedException ie) { ; }
}
};
}

//Sobreescribimos el constructor para darle un titulo al frame
public CounterSolution() {
super("Ejercicio 1");

numberLabel = new JLabel(" ", JLabel.CENTER);
stopButton = new JButton("Detener");

//Recuperamos la fuente de la etiqueta
Font font = numberLabel.getFont();
//Recreamos la fuente con un tamaño de 32 puntos
font = font.deriveFont(32.0f);
//Establecemos la fuente nueva de la etiqueta
numberLabel.setFont(font);

stopButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
shouldContinue = false;
}
});

this.setLayout(new BorderLayout());
this.add(numberLabel, BorderLayout.CENTER);
this.add(stopButton, BorderLayout.PAGE_START);

//Ajustamos la ventana para el tamaño de los componentes
this.pack();
//Mostramos la ventana
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

new Thread(new Counter()).start();
}

public static void main(String[] args) {
new CounterSolution();
}
}

SWT. Alternativa a Swing

SWT (Standard Widget Toolkit) es un kit de desarrollo de aplicaciones gráficas (o sea GUI's) desarrollado por y para el proyecto eclipse que puede utilizarse sin necesidad indispensable del anteriormente citado IDE; y que nos ofrece algunas caráteristicas extra a las de Swing.

En realidad no lo he usado mucho pero parece ser una buena opción para utilizar controles diferentes y, obviamente, parecidos a los del IDE Eclipse.