11 dic 2010

Introducción al lenguaje


Java es un lenguaje de programación de alto nivel (se asemeja mas al lenguaje humano) el cual se basa en la programación orientada a objetos desarrollado por Sun Microsystems a principios de la década de los 90s. El lenguaje en sí mismo toma mucha de su sintaxis de C y C++, pero tiene un modelo de objetos más simple y elimina herramientas de bajo nivel, que suelen inducir a muchos errores, como la manipulación directa de punteros o memoria.
Etapas para desarrollar un programa en java:

- Edición: Se escriben las instrucciones del programa.
- Compilación: Se compila el código fuente.
- Ejecución: El código de bytes es ejecutado por la máquina virtual de java JVM.

Para el desarrollo de nuestras aplicaciones utilizaremos el JCreator LE (es el IDE - entorno integrado de desarrollo) el cual se recomienda descargarlo de la página de Xinox Software http://www.jcreator.com/ y también se deberá descargar el Java SE Development Kit (JDK) que contiene el compilador, la JVM y a las librerías del lenguaje. Se recomienda descargar el JDK de la página de Sun Microsystems http://java.sun.com/.

Antes de empezar a programar deberemos tener en cuenta lo siguiente:

-> Palabras reservadas del lenguaje JAVA:

abstract
default
if
private
this
boolean
do
implements
protected
throw
break
double
import
public
throws
byte
else
instanceof
return
transient
case
extends
int
short
try
catch
final
interface
static
void
char
finally
long
strictfp
volatile
class
float
native
super
while
const
for
new
switch
assert
continue
goto
package
synchronized
enum

-> Tipos de datos primitivos: forman parte del nucleo del lenguaje java.
Carácter:
  • char: 16 bits rango 0 a 65535
Entero:
  • byte: 8 bits rango -128 a 127
  • short: 16 bits rango -32768 a 32767
  • int: 32 bits rango -2147483648 a 2147483647
  • long: 64 bits rango -9223372036854775808 a 9223372036854775807
Real:
  • float: 32 bits rango -3.4x10^38 a -1.4x10^-45, 1.4x10^-45 a 3.4x10^38
  • double: 64 bits rango -1.7x10^308 a -4.9x10^-324, 4.9x10^-324 a 1.7x10^308
Booleano:
  • boolean: 1 bit rango true, false
-> Operadores Aritméticos:
  • Resta( - ): a-b -> 2-1 = 1
  • Suma( + ): a+b -> 1+1 = 2
  • Multiplicación( * ): a*b -> 2*1 = 2
  • División( / ): a/b -> 2/1 = 2
  • Residuo( % ): a%b -> 2%1 = 0
Jerarquía de los operadores aritméticos:
  • ( ): Se evalúan en primer lugar.
  • * / %: Se evalúan en segundo lugar.
  • + -: Se evalúan a último.
Métodos matemáticos del lenguaje java:
  • n^m: Math.pow(n, m)
  • raíz cuadrada de n: Math.sqrt(n)
-> Etapas de desarrollo de un algoritmo
Declaración de variables.
  • Entrada de datos.
  • Procesos (cálculos).
  • Salida de resultados.

-> Clases Swing
- JLabel:
  • Declaración: JLabel nombre;
  • Constructor: nombre = new JLabel();
  • Imagen: nombre = new JLabel(new ImageIcon("imagen"));
  • Texto y alineación: nombre = new JLabel("texto", alineación);
* NOTA (alineación):
  • SwingConstants.CENTER -> centrado.
  • SwingConstants.RIGHT -> alineado a la derecha.
  • SwingConstants.LEFT -> alineado a la izquierda.
- JButton:
  • Declaración: JButton nombre;
  • Constructor: nombre = new JButton();
  • Imagen: nombre = new JButton(new ImageIcon("imagen"));
  • Texto: nombre = new JButton("texto");
- JTextField:
  • Declaración: JTextField nombre;
  • Constructor: nombre = new JTextField();
  • Texto y alineación: nombre = new JTextField("texto");
  • Obtener el texto y almacenarlo en una variable: variable = nombre.getText();
  • Visualizar y fijar texto: nombre.setText("texto");
- JTextArea:
  • Declaración: JTextArea nombre;
  • Constructor: nombre = new JTextArea();
  • Texto y alineación: nombre = new JTextArea("texto");
  • Obtener el texto y almacenarlo en una variable: variable = nombre.getText();
  • Visualizar y fijar texto: nombre.setText("texto");
  • Insertar texto debajo de la última linea de texto: nombre.append("texto");
- JScrollPane:
  • Declaración: JScrollPane nombre;
  • Constructor: nombre = new JScrollPane(nombreTextArea);
- Métodos comúnes:
  • nombre.setBounds(x1, y1, ancho, alto);
* x1: coordenada x de la esquina superior izquierda.
* y1: coordenada y de la esquina superior izquierda.
* ancho: ancho de la zona rectangular del control.
* alto: altura de la zona rectangular del control.
Para comprender mejor lo especificado anteriormente vamos al desarrollo de la primera aplicación estructura secuencial.

10 dic 2010

Estructura Secuencial

Es cuando las instrucciones estan una a continuación de la otra siguiendo una única secuencia:



-> Ejemplo de pseudocódigo suma de dos números:

Inicio

//Declaración de variables
entero num1, num2, suma

//Entrada de datos
Leer num1, num2

//Proceso (cálculo)
suma = num1 + num2

//Salida de resultados
Visualizar suma

Fin

-> Programación en JCreator:

Abrimos es JCreator -> create proyect -> seleccionamos Basic Java Applet, botón next -> asignamos un nombre a nuestro proyecto, botón finish.

* El nombre que se le asigna al proyecto debe ser especificado en la clase.

Codificación del pseudocódigo suma de dos números:

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

public class suma extends JApplet implements ActionListener{

          //Declaración de controles
          JButton btnCalcular;
          JLabel lblNum1, lblNum2;
          JTextField txtNum1, txtNum2;
          JTextArea txtA;
          JScrollPane scpSuma;

          //Creación de la interfaz gráfica de usuario GUI
          public void init(){
                    getContentPane().setLayout(null);

                    lblNum1 = new JLabel("Primer #");
                    lblNum1.setBounds(15,15,50,23);
                    getContentPane().add(lblNum1);

                    txtNum1 = new JTextField();
                    txtNum1.setBounds(81,15,107,23);
                    getContentPane().add(txtNum1);

                    lblNum2 = new JLabel("Segundo #");
                    lblNum2.setBounds(15,39,60,23);
                    getContentPane().add(lblNum2);

                    txtNum2 = new JTextField();
                    txtNum2.setBounds(81,39,107,23);
                    getContentPane().add(txtNum2);

                    btnCalcular = new JButton("Calcular");
                    btnCalcular.setBounds(250,15,101,23);
                    btnCalcular.addActionListener(this);
                    getContentPane().add(btnCalcular);

                    txtA = new JTextArea();txtA.setFont(new Font("monospaced",0,12));

                    scpSuma = new JScrollPane(txtA);
                    scpSuma.setBounds(15,75,337,90);
                    getContentPane().add(scpSuma);
          }

          //Proceso eventos ActionEvent
          public void actionPerformed( ActionEvent e ){
                    //Declaración de variables
                    int num1, num2, suma;

                    //Entrada de datos
                    num1 = Integer.parseInt(txtNum1.getText());
                    num2 = Integer.parseInt(txtNum2.getText());

                    //Cálculo proceso (suma)
                    suma = num1 + num2;

                    //Visualizar (salida de resultados)
                    txtA.setText("Suma "+num1+" + "+num2+" = "+suma);
          }
}



* Para comprender mejor el uso de la clase Swing y los métodos comunes ir a Introducción JAVA.

- Ir al siguiente ejemplo de estructura secuencial.

9 dic 2010

Estructura secuencial ejemplo 2

El siguiente programa lee una cantidad en gigabytes y lo convierte a megabytes, kilobytes, bytes y bits.

-> Pseudocódigo:

Inicio

//Declaración de variables
double gigas,megas,kilo,bytes,bits

//Entrada de datos
Leer gigas

//Proceso (conversiones)
megas = gigas*1024
kilo = megas*1024
bytes = kilo*1024
bits = bytes*8

//Salida de resultados
Visualizar megas,kilo,bytes,bits

Fin

-> Programación en JCreatorAbrir el JCreator, crear un nuevo proyecto (basic java applet) con el nombre "calculadorabits".

* No incluir las comillas ("").


import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

public class calculadorabits extends JApplet implements ActionListener{

          //Declaración de controles
          JLabel lblGigabytes;
          JTextField txtGigabytes;
          JButton btnCalcular;
          JTextArea txtA;
          JScrollPane scpResultado;

          //Creación de la interfaz gráfica de usuario GUI
          public void init(){
                    getContentPane().setLayout(null);

                    lblGigabytes = new JLabel("Gigabytes");
                    lblGigabytes.setBounds(20,20,70,23);
                    getContentPane().add(lblGigabytes);

                    txtGigabytes = new JTextField();
                    txtGigabytes.setBounds(90,20,100,23);
                    getContentPane().add(txtGigabytes);

                    btnCalcular = new JButton("Calcular");
                    btnCalcular.setBounds(219,20,100,23);
                    btnCalcular.addActionListener(this);
                    getContentPane().add(btnCalcular);

                    txtA = new JTextArea();
                    scpResultado = new JScrollPane(txtA);
                    scpResultado.setBounds(20,53,300,100);
                    getContentPane().add(scpResultado);
          }

          //Proceso eventos ActionEvent
          public void actionPerformed( ActionEvent e ){

                    //Declaración de variables
                    double gigas,megas,kilo,bytes,bits;

                    //Entrada de datos
                    gigas = Double.parseDouble(txtGigabytes.getText());

                    //Proceso (conversiones)
                    megas = gigas*1024;
                    kilo = megas*1024;
                    bytes = kilo*1024;
                    bits = bytes*8;

                    //Visualizar salida de resultados
                    txtA.setText("Megabytes: "+megas+"\n");
                    txtA.append("Kilobytes: "+kilo+"\n");
                    txtA.append("Bytes: "+bytes+"\n");
                    txtA.append("Bits: "+bits);
          }
}



- Ir al primer ejemplo de estructura secuencial.

- Ir a estructura de selección simple if.

8 dic 2010

Estructura de selección simple (if)

Las estructuras de selección son empleadas para tomar decisiones lógicas. En este tipo de estructuras se evalúa una condición y en función del resultado se realizan una serie de instrucciones. Las condiciones se especifican utilizando expresiones lógicas.




si ( condicion )

instruccion a

* Si se tiene más de una instrucción debe ir entre corchetes { }:

si ( condición ) {


instruccion 1
instruccion 2
instruccion 3
instruccion n
}


-> Operadores Relacionales:

Se utilizan para escribir condiciones que describan la relación entre dos valores.
  • == igual a
  • != diferente de
  • > mayor que
  • <>>= mayor igual que
  • <= menor igual que
-> Operadores Lógicos Se utilizan para relacionar varias expresiones lógicas.
  • II OR lógico (ó) -> Alt+124 (2 veces)
  • && AND lógico (y)
  • ! NOT lógico (no)
A continuación desarrollaremos un programa que permita ingresar el primer octeto de una ID de red (Network ID) y nos determinará a que clase de dirección ip pertenece caso contrario mostrará un mensaje de error.

-> Pseudocódigo
Inicio

//Declaración de variables
entero idred

//Entrada de datos
Leer idred

//Proceso y salida de resultados (Determina a que clase pertenece)
si (idred<=126) Visualizar La id de red pertenece a la clase A
si (idred>=128 AND idred<=191) Visualizar La id de red pertenece a la clase B
si (idred>=192 AND idred<=223) Visualizar La id de red pertenece a la clase C
si (idred=127 OR idred>=224 OR idred<=-1) Visualizar Error: fuera de rango.
Fin

-> Codificación del applet: Abrir el JCreator, crear un nuevo proyecto (basic java applet) con el nombre "claseip".

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

public class claseip extends JApplet implements ActionListener{

          JLabel lblIdred;
          JTextField txtIdred;
          JButton btnProcesar,btnBorrar;
          JTextArea txtA;
          JScrollPane scpResultado;

          public void init(){
                    getContentPane().setLayout(null);

                    lblIdred = new JLabel("Id Red");
                    lblIdred.setBounds(20,20,75,23);
                    getContentPane().add(lblIdred);

                    txtIdred = new JTextField();
                    txtIdred.setBounds(65,20,75,23);
                    getContentPane().add(txtIdred);

                    btnProcesar = new JButton("Procesar");
                    btnProcesar.setBounds(200,20,100,23);
                    btnProcesar.addActionListener(this);
                    getContentPane().add(btnProcesar);

                    btnBorrar = new JButton("Borrar");
                    btnBorrar.setBounds(200,50,100,23);
                    btnBorrar.addActionListener(this);
                    getContentPane().add(btnBorrar);

                    txtA = new JTextArea();

                    scpResultado = new JScrollPane(txtA);
                    scpResultado.setBounds(20,83,281,100);
                    getContentPane().add(scpResultado);
          }

          public void actionPerformed( ActionEvent e ){
                    //Si se hace click en el botón procesar
                    if(e.getSource()==btnProcesar){
                              int idred; idred = Integer.parseInt(txtIdred.getText());
                              if(idred<=126) txtA.setText("La id de red "+idred+" pertenece a la clase A");
                              if(idred>=128&&idred<=191) txtA.setText("La id de red "+idred+" pertenece a la clase B");
                              if(idred>=192&&idred<=223) txtA.setText("La id de red "+idred+" pertenece a la clase C");
                              if(idred==127 II idred>=224 II idred<=-1) txtA.setText("Error: fuera de rango");
                    }
                    //Si se hace click en el botón borrar
                    if(e.getSource()==btnBorrar){
                              txtA.setText(""); txtIdred.setText("");
                              txtIdred.requestFocus();
                    }
          }
}

** NOTA: en la linea -> if(idred==127 II idred>=224 II idred<=-1) reemplazar el II por Alt+124 (2 veces) Ir a estructura secuencial ejemplo 2.
Ir a estructura de selección doble if...else.

7 dic 2010

Estructura de selección doble (if...else)

El funcionamiento de la estructura de selección doble si…sino (if…else) evalúa una condición lógica, si es verdadera ejecuta una o varias instrucciones (conjunto de instrucciones), si es falsa, ejecuta otro conjunto de instrucciones.



si ( condición )
Instrucción a
sino
Instrucción b

* Si se tiene más de una instrucción:

Si ( condición ) {
Instrucción a1
Instrucción a2
Instrucción a3
Instrucción aN
}
sino {
Instrucción b1
Instrucción b2
Instrucción b3
Instrucción bN
}

Ejemplo
Vamos a desarrollar un programa que permita ingresar un número de tres cifras positivo y nos indique si es o no un número capicúa (número que se lee igual de derecha a izquierda que de izquierda a derecha).

-> Pseudocódigo

Inicio

          //Declaración de variables
          entero num, c, d, u, reves

          //Entrada de datos
          Leer num

          //Determina si el número ingresado es positivo y de tres cifras
          si (num>=100 AND num<=999) entonces
                    //Separa los dígitos del número
                    c = num/100
                    d = (num MOD 100)/10
                    u = num MOD 10

                    //Une los dígitos separados de forma inversa
                    reves = u*100+d*10+c

                    //Determina si el número es capicúa
                    Si (num = reves) entonces
                              Visualizar El número es capicúa
                    Sino
                              Visualizar El número no es capicúa
          //Muestra mensaje de error si el número no es positivo y de tres cifras
          Sino
                    Visualizar Error: ingrese número positivo de tres cifras
Fin

-> Programación en JCreator:

Crear un nuevo proyecto (basic java applet) con el nombre "capicua".


import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

public class capicua extends JApplet implements ActionListener{

          //Declaramos controles
          JLabel lblNumero;
          JTextField txtNumero;
          JButton btnProcesar,btnBorrar;
          JTextArea txtA;
          JScrollPane scpResultado;

          //Desarrollo de la interfaz gráfica de usuario GUI
          public void init(){
                    getContentPane().setLayout(null);

                    lblNumero = new JLabel("Número");
                    lblNumero.setBounds(20,20,70,23);
                    getContentPane().add(lblNumero);

                    txtNumero = new JTextField();
                    txtNumero.setBounds(90,20,100,23);
                    getContentPane().add(txtNumero);

                    btnProcesar = new JButton("Procesar");
                    btnProcesar.setBounds(210,20,100,23);
                    btnProcesar.addActionListener(this);
                    getContentPane().add(btnProcesar);

                    btnBorrar = new JButton("Borrar");
                    btnBorrar.setBounds(210,50,100,23);
                    btnBorrar.addActionListener(this);
                    getContentPane().add(btnBorrar);

                    txtA = new JTextArea();

                    scpResultado = new JScrollPane(txtA);
                    scpResultado.setBounds(20,83,290,100);
                    getContentPane().add(scpResultado);
          }

          //Eventos de tipo ActionEvent
          public void actionPerformed( ActionEvent e ){

                    //Si se hizo click en el botón procesar
                    if(e.getSource()==btnProcesar){

                              //Declaración de variables
                              int num,u,d,c,reves;

                              //Entrada de datos
                              num = Integer.parseInt(txtNumero.getText());

                              //Determina si el número ingresado es positivo y de tres cifras
                              if(num>=100&&num<=999){
                                        //Separa los dígitos del número ingresado
                                        c = num/100;
                                        d = (num%100)/10;
                                        u = num%10;

                                        //Une los dígitos de forma inversa
                                        reves = u*100+d*10+c;

                                        //Determina si el número ingresado es capicúa
                                        if(num==reves)
                                                  txtA.setText("el número "+num+" es capicúa");
                                        else
                                                  txtA.setText("el número "+num+" no es capicúa");
                              }
                              //Muestra mensaje de error si el número esta fuera de rango
                              else
                                        txtA.setText("Error: ingrese número positivo de tres cifras");
                    }
                    //Si se hizo click en el botón borrar
                    if(e.getSource()==btnBorrar){
                              txtA.setText("");
                              txtNumero.setText(""); txtNumero.requestFocus();
                    }
          }
}



Ir a estructura de selección simple.
Ir a estructura de selección multiple switch.

6 dic 2010

Estructura de selección multiple switch

También conocido como estructura de decisión múltiple permite seleccionar un camino entre varios caminos posibles teniendo como base el valor de la variable seleccionada la cual es comparada con una lista de constantes (case n) enteras o de carácter. Cuando el valor de la variable seleccionada es igual a una de las constantes ‘n’, se ejecuta la instrucción o el grupo de instrucciones que pertenecen a dicha constante.

** Si el valor de la variable seleccionada no coincide con ninguna constante, se ejecuta la instrucción por defecto (default), si es que existe.

** Si un case carece de un break (romper), se ejecutaran los demás case que siguen hasta encontrar un break o hasta llegar al final de switch.




según (variable) {
          caso c1: instrucción 1
          romper
          caso c2: instrucción 2
          romper
          caso cN: instrucción N
          romper
          defecto: instrucción defecto
}


A continuación desarrollaremos un programa que lea un número entero comprendido entre el número 1 al 7 y nos muestre a que día de la semana pertenece (1 lunes, 2 martes, ..., 7 domingo), caso contrario (si el número ingresado esta fuera de rango) muestre un mensaje de error.

-> Pseudocódigo:Inicio

//Declaración de variables
entero n

//Entrada de datos
Leer n

//Proceso inicia selección
según (n) {
          caso 1: visualizar "Lunes"
          romper
          caso 2: visualizar "Martes"
          romper
          caso 3: visualizar "Miércoles"
          romper
          caso 4: visualizar "Jueves"
          romper
          caso 5: visualizar "Viernes"
          romper
          caso 6: visualizar "Sábado"
          romper
          defecto: visualizar "Error: ingrese número dentro del rango"
          //finaliza el proceso de selección
fin según
Fin


-> Codificación del applet:
creamos un nuevo proyecto (basic java applet) con el nombre "diasemana".


import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

public class diasemana extends JApplet implements ActionListener{

          //Declaración de controles
          JLabel lbldia;
          JTextField txtdia;
          JButton btnProcesar,btnBorrar;
          JTextArea txtA;
          JScrollPane scpResultado;

          //Desarrollo de la interfaz gráfica de usuario GUI
          public void init(){
                    getContentPane().setLayout(null);

                    lbldia = new JLabel("Número 1 - 7");
                    lbldia.setBounds(20,20,80,23);
                    getContentPane().add(lbldia);

                    txtdia = new JTextField();
                    txtdia.setBounds(100,20,100,23);
                    getContentPane().add(txtdia);

                    btnProcesar = new JButton("Procesar");
                    btnProcesar.setBounds(230,20,100,23);
                    btnProcesar.addActionListener(this);
                    getContentPane().add(btnProcesar);

                    btnBorrar = new JButton("Borrar");
                    btnBorrar.setBounds(230,50,100,23);
                    btnBorrar.addActionListener(this);
                    getContentPane().add(btnBorrar);

                    txtA = new JTextArea();

                    scpResultado = new JScrollPane(txtA);
                    scpResultado.setBounds(20,80,311,100);
                    getContentPane().add(scpResultado);
          }

          //Eventos tipo ActionEvent
          public void actionPerformed( ActionEvent e ){

                    //Si se hizo click en procesar
                    if(e.getSource()==btnProcesar){
                              //Declaración de variables
                              int n;

                              //Entrada de datos
                              n = Integer.parseInt(txtdia.getText());

                              //Proceso de selección
                              switch (n) {
                                        case 1: txtA.setText("Lunes"); break;
                                        case 2: txtA.setText("Martes"); break;
                                        case 3: txtA.setText("Miércoles"); break;
                                        case 4: txtA.setText("Jueves"); break;
                                        case 5: txtA.setText("Viernes"); break;
                                        case 6: txtA.setText("Sábado"); break;
                                        case 7: txtA.setText("Domingo"); break;
                                        default: txtA.setText("Error: ingrese número dentro del rango");
                              }
                    }

                    //Si se hizo click en borrar
                    if(e.getSource()==btnBorrar){
                              txtA.setText("");
                              txtdia.setText("");
                              txtdia.requestFocus();
                    }
          }
}



Ir a estructura de selección doble if...else.
Ir a métodos tipo void.

5 dic 2010

Métodos Tipo Void

Programación Modular

La programación modular consiste en dividir un programa en módulos o subprogramas con el fin de hacerlo más legible y manejable.

* módulo: es cada una de las partes de un programa que resuelve uno de los subproblemas en que se divide el problema complejo original.






Variables Locales y Globales

Variables Locales

Es una variable que se declara en el interior de un método, es decir, sólo puede ser utilizada dentro del método donde fue declarada.

Variables Globales

Es una variable que se declara dentro del programa, pero en el exterior de todos los métodos, es decir, puede ser utilizada desde cualquier parte del programa.


Métodos Tipo Void

Sin Parámetros: Estos métodos no pueden recibir datos de entrada ni retornar ningun resultado en su invocación.

void Nombre(){
          Declaración de variables locales
          Cuerpo del método
}

invocación: Nombre();


Con Parámetros: Estos métodos reciben datos de entrada a través de variables locales al método (parámetros); pero, tampoco pueden retornar ningun resultado en su invocación.

void Nombre(tipo1 v1, tipo2 v2){
          Declaración de variables locales
          Cuerpo del método
}

invocación: Nombre(valor1, valor2);


Ejemplo:

Vamos a diseñar un programa que determine el área y volumen de una esfera (área: a*pi*r^2, volumen: 4/3*pi*r^3).


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class esfera extends JApplet implements ActionListener{

          //Declaración de controles de la GUI
          JLabel lblRadio;
          JTextField txtRadio;
          JButton btnProcesar, btnBorrar;
          JTextArea txtS;
          JScrollPane scpResultado;

          //Declaración de variables globales
          double radio, area, volumen;

          //Interfaz gráfica de usuario
          public void init(){
                    getContentPane().setLayout(null);

                    lblRadio = new JLabel("RADIO");
                    lblRadio.setBounds(20,20,50,23);
                    getContentPane().add(lblRadio);

                    txtRadio = new JTextField();
                    txtRadio.setBounds(90,20,100,23);
                    getContentPane().add(txtRadio);

                    btnProcesar = new JButton("PROCESAR");
                    btnProcesar.setBounds(250,20,100,23);
                    btnProcesar.addActionListener(this);
                    getContentPane().add(btnProcesar);

                    btnBorrar = new JButton("BORRAR");
                    btnBorrar.setBounds(250,50,100,23);
                    btnBorrar.addActionListener(this);
                    getContentPane().add(btnBorrar);

                    txtS = new JTextArea();
                    txtS.setFont(new Font("monospaced",0,12));

                    scpResultado = new JScrollPane(txtS);
                    scpResultado.setBounds(20,86,331,100);
                    getContentPane().add(scpResultado);
          }

          public void actionPerformed( ActionEvent e ){
                    if(e.getSource()==btnProcesar)
                              procesar();
                    if(e.getSource()==btnBorrar)
                              borrar();
          }

          //Método botón procesar
          void procesar(){
                    entradaDatos();
                    calcularArea();
                    calcularVolumen();
                    visualizarResultados();
          }

          //Método botón borrar
          void borrar(){
                    txtRadio.setText("");
                    txtS.setText("");
                    txtRadio.requestFocus();
          }

          //Ingreso de datos
          void entradaDatos(){
                    radio = Double.parseDouble(txtRadio.getText());
          }

          //Calcula el área de la esfera
          void calcularArea(){
                    area = 4*Math.PI*Math.pow(radio,2);
          }

          //Calcula el volumen de la esfera
          void calcularVolumen(){
                    volumen = (4/3)*Math.PI*Math.pow(radio,3);
          }

          //Muestra los resultados
          void visualizarResultados(){
                    txtS.setText("");
                    imprimir("Área Esfera: "+area);
                    imprimir("Volumen Esfera: "+volumen);
          }

          //Imprime una línea de texto con salto de línea
          void imprimir(String cadena){
                    txtS.append(cadena+"\n");
          }
}



* En este ejemplo se esta utilizando el método tipo void sin parámetros.

Ir a Estructura de selección multiple Switch.
Ir al siguiente ejemplo tipo void con parámetros.

4 dic 2010

Ejemplo tipo void con parámetros

En esta aplicación vamos a desarrollar un programa para convertir una cantidad dada en km. a millas, yardas y metros (el nombre para la clase será "convertidor").

1 km = 0.621371 yardas
1 km = 1093.6133 millas
1 km = 1000 metros


Codificación del applet:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class convertidor extends JApplet implements ActionListener{

          //Declaración de controles a utilizar
          JButton btnProcesar, btnBorrar;
          JLabel lblKilometros;
          JTextField txtKilometros;
          JTextArea txtS;
          JScrollPane scpScroll;

          //Interfaz GUI
          public void init(){
                    getContentPane().setLayout(null);

                    lblKilometros = new JLabel("Kilometros");
                    lblKilometros.setBounds(15,15,100,23);
                    getContentPane().add(lblKilometros);

                    txtKilometros = new JTextField();
                    txtKilometros.setBounds(90,15,100,23);
                    getContentPane().add(txtKilometros);

                    btnProcesar = new JButton("PROCESAR");
                    btnProcesar.setBounds(245,15,100,23);
                    btnProcesar.addActionListener(this);
                    getContentPane().add(btnProcesar);

                    btnBorrar = new JButton("BORRAR");
                    btnBorrar.setBounds(245,40,100,23);
                    btnBorrar.addActionListener(this);
                    getContentPane().add(btnBorrar);

                    txtS = new JTextArea();
                    txtS.setFont(new Font("monospaced",0,12));

                    scpScroll = new JScrollPane(txtS);
                    scpScroll.setBounds(15,81,331,150);
                    getContentPane().add(scpScroll);
          }

          //procesa eventos tipo ActionEvent
          public void actionPerformed( ActionEvent e ){
                    if(e.getSource()==btnProcesar)
                              procesar();
                    if(e.getSource()==btnBorrar)
                              borrar();
          }

          //método del botón procesar
          void procesar(){
                    //declaración de variable local
                    double nkm;

                    //entrada de datos
                    nkm = Double.parseDouble(txtKilometros.getText());

                    //invocación de métodos
                    txtS.setText("");
                    calcularMetros(nkm);
                    calcularMillas(nkm);
                    calcularYardas(nkm);
          }

          //método que convierte a metros
          void calcularMetros(double xkm){
                    double metros;
                    metros = xkm*1000;
                    imprimir("Metros: "+metros);
          }

          //método que convierte a millas
          void calcularMillas(double xkm){
                    double millas;
                    millas = xkm*0.621371;
                    imprimir("Millas: "+millas);
          }

          //método que convierte a yardas
          void calcularYardas(double xkm){
                    double yardas;
                    yardas = xkm*1093.6133;
                    imprimir("Yardas: "+yardas);
          }

          //método del botón borrar
          void borrar(){
                    txtS.setText("");
                    txtKilometros.setText("");
                    txtKilometros.requestFocus();
          }

          //método que imprime una cadena de texto añadiendo un salto de línea
          public void imprimir(String cad){
                    txtS.append(cad+"\n");
          }
}


Resultado:



Para comprender mejor el ejemplo ir a métodos tipo void.
Ir a métodos con valor de retorno.

3 dic 2010

Métodos con valor de retorno

Los métodos con valor de retorno son módulos de programa que pueden recibir datos de entrada por medio de variables locales (parámetros) y posteriormente retorna un resultado al punto donde es llamado. Este tipo de métodos se utiliza para operar cualquier tipo de proceso que produzca un resultado.

Los métodos con valor de retorno se clasifican en dos tipos:

  • Métodos con valor de retorno sin parámetros.
  • Métodos con valor de retorno con parámetros.
1. Métodos con valor de retorno sin parámetros
Este tipo de métodos no reciben datos de entrada; pero de igual forma retornan un resultado al punto donde son llamados.



Su definición es de la siguiente manera:
tipo nombreMetodo(){
          Declaracion de variables locales
          Cuerpo del método
          return valor;
}

Donde:
  • valor: Es el valor que es retornado por el método.
  • tipo: Es el tipo del valor de retorno.
Invocación (llamado):
variable = nombreMetodo();
Donde:
  • variable: Es la variable que recibe el valor retornado por el método.


2. Métodos con valor de retorno con parámetros
Este tipo de métodos reciben datos de entrada por medio de parámetros y retornan un resultado al pundo de su llamado.


Su definición es de la siguiente manera:

tipo nombreMetodo(tipo1 p, tipo2 q, tipo3 r, ...){
          Declaración de variables locales
          Cuerpo del método
          return valor;
}

Donde:
tipo: Es el tipo de valor de retorno.
p, q, r, ... : son los nombres de los parámetros.
tipo1, tipo2, tipo3, ... : son los tipos de datos de los parámetros.
valor: es el valor de retorno.

Invocación (llamado):
variable = nombreMetodo(v1, v2, v3, ...);

Donde:
variable: Es el nombre del método llamado.
v1, v2, v3, ... : Son los valores dados a los parámetros.

Ejemplo (métodos con valor de retorno con parámetros): convertir cantidad dada en segundos en HH:MM:SS

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class HHMMSS extends JApplet implements ActionListener{

          JButton btnCal, btnRes;
          JLabel lblSeg;
          JTextField txtSeg;
          JTextArea txtA;
          JScrollPane scpScroll;

          public void init(){
                    getContentPane().setLayout(null);
                    getContentPane().setBackground(Color.darkGray);

                    lblSeg = new JLabel("SEGUNDOS:");
                    lblSeg.setBounds(20,20,90,23);
                    lblSeg.setForeground(Color.white);
                    lblSeg.setFont(new Font("arial",1,14));
                    getContentPane().add(lblSeg);

                    txtSeg = new JTextField();
                    txtSeg.setBounds(120,20,100,23);
                    txtSeg.setBackground(new Color(255,200,0));
                    txtSeg.setFont(new Font("arial",1,14));
                    getContentPane().add(txtSeg);

                    btnCal = new JButton("CALCULAR");
                    btnCal.setBounds(20,53,100,23);
                    btnCal.addActionListener(this);
                    getContentPane().add(btnCal);

                    btnRes = new JButton("RESET");
                    btnRes.setBounds(120,53,100,23);
                    btnRes.addActionListener(this);
                    getContentPane().add(btnRes);

                    txtA = new JTextArea();
                    txtA.setFont(new Font("arial",1,16));
                    txtA.setBackground(Color.darkGray);
                    txtA.setForeground(Color.green);
                    txtA.setEditable(false);

                    scpScroll = new JScrollPane(txtA);
                    scpScroll.setBounds(20,86,200,80);
                    getContentPane().add(scpScroll);
          }

          public void actionPerformed(ActionEvent e){
                    if(e.getSource()==btnCal)
                              hms();
                    if(e.getSource()==btnRes)
                              reset();
          }

          void hms(){
                    txtA.setText("");
                    int cantSeg = getSegundos(),
                    hor = horas(cantSeg),
                    min = minutos(cantSeg),
                    seg = segundos(cantSeg);
                    imprimir("Resultado:");
                    imprimir("----------------\n");
                    txtA.append("HH:MM:SS >> "+hor+":"+min+":"+seg);
          }

          void reset(){
                    txtA.setText("");
                    txtSeg.setText("");
                    txtSeg.requestFocus();
          }

          //Métodos con valor de retorno con parámetros
          int horas(int seg){
                    int h = seg/3600;
                    return h;
          }

          int minutos(int seg){
                    int m = (seg%3600)/60;
                    return m;
          }

          int segundos(int seg){
                    int s = (seg%3600)%60;
                    return s;
          }

          //Método que retorna el valor numérico entero de la caja de texto
          int getSegundos(){
                    int cs;
                    //donde cs: cantidad de segundos.
                    //Se realiza la validación de datos empleando TRY - CATCH
                    try{ cs = Integer.parseInt(txtSeg.getText());}
                    catch(Exception e){ cs = 0;}
                    return segundos;
          }

          void imprimir(String cad){
                    txtA.append(cad+"\n");
          }
}



Ir a ejemplos tipo void con parámetros.
Ir a la lección de ESTRUCTURAS REPETITIVAS.