gentoo linux, java, software libre y otras hierbas
dic, 05 2007 - 12:11 pm

[código] Métodos (o funciones) en Java (2)

(anterior) En esta sección se ofrece un análisis más detallados de los objetos. Los objetos contienen datos llamados campos y unidades llamados métodos. En esta sección se encuentran ejemplos muy conocidos sobre recursividad. Las técnicas aquí expuestas son esenciales para producir programas correctamente estructurados, especialmente los más grandes que desarrollan los programadores de sistemas y aplicaciones. También se muestra el uso de la sobrecarga de métodos y se presentan el manejo de eventos.

Un ejemplo del alcance de las variables en métodos

// Fig. 6.10: Alcance.java
// Un ejemplo del alcance.
import java.awt.Container;
import javax.swing.*;
public class Alcance extends JApplet
{
	JTextArea areaSalida;

	// campo que es accesible para todos los métodos de esta clase
	int x = 1;
	// crear GUI del subprograma
	public void init()
	{
		areaSalida = new JTextArea();
		Container contenedor = getContentPane();
		contenedor.add( areaSalida );
	} // fin del método init

	// el método start se llama después de que init termina; start llama a
	// los métodos usarLocal and usarCampo
	public void start()
	{
		int x = 5;   // variable local en método start que sombrea el campo x

		areaSalida.append( "x local en start es " + x );

		usarLocal();  // usarLocal tiene x local
		usarCampo();  // useInstance utiliza el campo x de Alcance
		usarLocal();  // usarLocal inicializa la variable local x
		usarCampo();  // Campo x de Alcance retiene su valor

		areaSalida.append( "\n\nx local en start es " + x );
	} // fin del método start

	// usarLocal crea e inicializa la variable local x durante cada llamada
	public void usarLocal()
	{
		int x = 25;  // se inicializa cada vez que se hace una llamada a usarLocal

		areaSalida.append( "\n\nx local en usarLocal es " + x +" después de entrar a usarLocal" );
		++x;
		areaSalida.append( "\nx local en usarLocal es " + x +" después de salir de usarLocal" );

	} // fin del método usarLocal

	// usarCampo modifica el campo x de Alcance durante cada llamada
	public void usarCampo()
	{
		areaSalida.append( "\n\nel campo x es " + x +" al entrar a usarCampo" );
		x *= 10;
		areaSalida.append( "\nel campo x es " + x +" al salir de usarCampo" );
	} // fin el método usarCampo
} // fin de la clase Alcance

Descargar código fuente

Uso de métodos sobrecargados

// Uso de métodos sobrecargados
import java.awt.Container;
import javax.swing.*;
public class SobrecargaMetodos extends JApplet
{
	// crear GUI y llamar a cada uno de los métodos cuadrado
	public void init()
	{
		JTextArea areaSalida = new JTextArea();
		Container contenedor = getContentPane();
		contenedor.add( areaSalida );

		areaSalida.setText( "El cuadrado del valor integer 7 es " + cuadrado( 7 ) +"\nEl cuadrado del valor double 

7.5 es " + cuadrado( 7.5 ) );
	} // fin del método init
	// método cuadrado con argumento int
	public int cuadrado( int intValor )
	{
		System.out.println( "Se llamo a cuadrado con argumento int: " + intValor );
		return intValor * intValor;
	} // fin del método cuadrado con argumento int
	// método cuadrado con argumento double
	public double cuadrado( double doubleValor )
	{
		System.out.println( "Se llamo a cuadrado con argumento double: " +doubleValor );
		return doubleValor * doubleValor;
	} // fin del método cuadrado con argumento double
} // fin de la clase SobrecargaMetodos

Descargar código fuente

Método recursivo para el factorial

// Método recursivo para el factorial.
import java.awt.*;
import javax.swing.*;
public class PruebaFactorial extends JApplet
{
	JTextArea areaSalida;

	// crear GUI y calcular factoriales del 0-10
	public void init()
	{
		areaSalida = new JTextArea();

		Container contenedor = getContentPane();
		contenedor.add( areaSalida );

		// calcular los factoriales de 0 hasta 10
		for ( long contador = 0; contador <= 10; contador++ )
			areaSalida.append( contador + "! = " +factorial( contador ) + "\n" );
	} // fin del método init

	// declaración recursiva del método factorial
	public long factorial( long numero )
	{
		// caso base
		if ( numero <= 1 )
			return 1;
		// paso recursivo
		else
			return numero * factorial( numero - 1 );
	} // fin del método factorial
} // fin de la clase PruebaFactorial

Descargar código fuente

Método recursivo fibonacci

// Método recursivo fibonacci.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class PruebaFibonacci extends JApplet implements ActionListener
{
	JLabel numeroEtiqueta, resultadoEtiqueta;
	JTextField numeroCampo, resultadoCampo;

	// configurar la GUI del subprograma
	public void init()
	{
		// obtener el panel de contenido y establecer su esquema como FlowLayout
		Container contenedor = getContentPane();
		contenedor.setLayout( new FlowLayout() );

		// crear numeroEtiqueta y adjuntarlo al panel de contenido
		numeroEtiqueta = new JLabel( "Escriba un entero y oprima Intro" );
		contenedor.add( numeroEtiqueta );

		// crear numeroCampo y adjuntarlo al panel de contenido
		numeroCampo = new JTextField( 10 );
		contenedor.add( numeroCampo );

		// registrar este subprograma como ActionListener de numeroCampo
		numeroCampo.addActionListener( this );

		// crear resultadoEtiqueta y adjuntarlo al panel de contenido
		resultadoEtiqueta = new JLabel( "El valor de Fibonacci es" );
		contenedor.add( resultadoEtiqueta );

		// crear numeroCampo, hacerlo no editable
		// y adjuntarlo al panel de contenido
		resultadoCampo = new JTextField( 15 );
		resultadoCampo.setEditable( false );
		contenedor.add( resultadoCampo );
	} // fin del método init

	// obtener entrada del usuario y llamar al método fibonacci
	public void actionPerformed( ActionEvent event )
	{
		long numero, valorFibonacci;

		// obtener entrada del usuario y convertirla en long
		numero = Long.parseLong( numeroCampo.getText() );
		showStatus( "Calculando ..." );

		// calcular valor de fibonacci para el número introducido por el usuario
		valorFibonacci = fibonacci( numero );
		// indicar que el procesamiento se completó y mostrar el resultado
		showStatus( "Listo." );
		resultadoCampo.setText( Long.toString( valorFibonacci ) );

	} // fin del método actionPerformed

	// declaración recursiva del método fibonacci
	public long fibonacci( long n )
	{
		// caso base
		if ( n == 0 || n == 1 )
			return n;
		// paso recursivo
		else
			return fibonacci( n - 1 ) + fibonacci( n - 2 );
	} // fin del método fibonacci
} // fin de la clase PruebaFibonacci

Descargar código fuente

38 Comentarios | deja el tuyo

Un enlace entrante

37 Comentarios en “[código] Métodos (o funciones) en Java (2)”

  1. Juan de Dios dice:

    Un excelente blob para los que queremos aprender a programar en java. Los ejercicios son my claros y comprensibles.

    Sigan adelante…

  2. brambila_62@hotmail.com dice:

    la verdad exelente aprendo mas de este tipo de foros que en la escuela y como dice juan de dios son muy claros los ejemplos

  3. luis xD dice:

    Estos ejemplos me han sido de mucha ayuda para poder entnder paso a paso los codigos y los algoritmos… esta buenisima … si no fuese mucho pedir… es q tengo un problema q no me compila bien . !! :( kisiera saber en q me estoi equivocando..:: porfa

    DEBO HACER UN CUADRADO D ASTERISCOS DE ACUERDO AL NUMERO INGRESADO… ( en vez de una cuadrado me salen los asteriscos en linea…. deberia salirme con un salto de linea “\n”.. pero parce q no me da resultado..)
    porfa aver si me dan una mano.. !!

    import javax.swing.JApplet;
    import javax.swing.JOptionPane;
    import java.awt.Graphics;
    import java.awt.Color;

    public class proyecto extends JApplet
    {
    public void paint(Graphics g)
    {
    String s=”";
    String n=JOptionPane.showInputDialog(“ingrese el lado del cuadrado”);
    int lado=Integer.parseInt(n);
    super.paint(g);

    for(int i=0;i<lado;i++)
    {
    for(int j=0;j<lado;j++)
    {
    s+=”*”;
    }
    s+=”\n”;
    }
    g.drawString(s,10,10);

    }
    }

  4. Casidiablo dice:

    Recuerda que estás trabajando sobre un objeto Graphics. Lo que debes hacer, en vez de poner “\n”, es cambiar las coordenadas verticales donde vas a poner el String.

    O sea, lo que debes cambiar es:

    g.drawString(s,10,10);

    ¿Entiendes?

  5. luis xD dice:

    si entendi… gracias !!
    una ultima consulta….
    y como seria usando un metodo q me devuelva un String ??? … el String q me devuelva tmb va ser con un salto de linea pero no me da resultado??… esto tmb me sale una linea de asteriscos..(hay alguna forma de hacer un cuadrado de asteriscos llamando al metodo solamente una vez!!)

    import javax.swing.JApplet;
    import javax.swing.JOptionPane;
    import java.awt.Graphics;
    import java.awt.Color;

    public class proyecto extends JApplet
    {
    public void paint(Graphics g)
    {
    String a=”";
    String n=JOptionPane.showInputDialog(“ingrese el lado del cuadrado”);
    int lado=Integer.parseInt(n);
    a=cuadradoDeAsteriscos(lado);
    super.paint(g);
    g.drawString(“”+a,20,20);
    }

    public String cuadradoDeAsteriscos(int lado)
    {
    String s=”";
    for(int i=0;i<lado;i++)
    {
    for(int j=0;j<lado;j++)
    {
    s+=”*”;
    }
    s+= “\n”; ;
    }
    return s;
    }
    }

  6. Casidiablo dice:

    En ese caso, si quieres usar solo un método que devuelva todo el cuadrado, podrías intentar imprimirlo caractér por caractér. Y poner un if que mire si el caractér es un \n, y en caso de que sea así pues le cambias la coordenada.

    Es lo más sencillo (aunque no creo que sea lo más óptimo).

    Un saludo!

  7. luis xD dice:

    Gracias man !!
    lo intentare….

    gracias x el tiempo q te tomaste en responderme esta consulta !!

    saludos !

  8. marvin dice:

    holas espero q en esto me ayuden por fa es importante la duda que tengo quiseira saber como hago constructores sobrecargados para el uso de un poligono bueno se me pidio hacer una clase que dibuje un poligono y lo hice asi

    import java.applet.Applet;
    import java.awt.*;
    public class Techo implements graficar{
    private int x[]={200,10,400};//aca inicializando sin constructores sobrecargados
    private int y[]={50,200,200};
    public void dibujar(Graphics g){
    if (g instanceof Graphics2D)
    { g.setColor(Color.black);
    Graphics2D g2 = (Graphics2D)g;
    g2.setStroke(new BasicStroke(3.0f)); // grosor de 3 pixels
    g.drawPolygon(x, y, 3);
    //Dibujamos la sombra del techo
    g.drawLine(10, 202, 400, 202);
    }
    //Pintando el techo color RBG
    Color c = new Color(255, 123, 8);
    g.setColor(c);
    g.fillPolygon(x, y, 3);
    }
    }

    en el cual no tuve problemas me salio bien me se me pido que haga con constructores sobrecargados y metodos accesorios y mutadores y trate de hacerlo asi como siguq aca abajo pero no me resulto ps no se como inicializar mis parametros en el constructor y me falta de paso hacer mi constructor sobrecargado y mis metodos accesorios y mutadores por ayudenme en eso se los pido por fa.

    public class poligono implement graficar
    {
    private int x[];
    private int y[];
    //he aqui mi problema cuando quiero hacer constructores sobrecargados
    public poligono()//constructor por defecto
    {
    x = new int {200,10,400};
    y = new int {50,200,200};
    }//pues aqui me sale error no se como inicializar este constructor y loos demas
    //contructores por fa me ayudan como inicializo mi constructor por defecto y los demas
    //constructores y sus metodos accesorios y mutadores por fa ayudenme
    public void dibujar(Graphics g)
    {
    g.drawPolygon(x, y, 3);
    //Dibujamos la sombra del techo
    g.drawLine(10, 202, 400, 202);

    //Pintando el techo color RBG
    Color c = new Color(255, 123, 8);
    g.setColor(c);
    g.fillPolygon(x, y, 3);
    }
    }

    NOTA: graficar es una interface q tengo eso no importa

  9. daniel dice:

    tengo una predunta:

    como puedo hacer que un programa creado en java netbeans pueda hacerse ejecutable.

    convertirlo en una aplicacion independiente de java que sin necesidad de java pueda abrirse y trabajar en el

    me podrian ayudar

    gracias

  10. juan david dice:

    hola lo que pasa es que tengo que hacer un programa en netbeans el cual por la parte visual del jframe tenga tres botones el cual uno dibuje ya sea un cuadrado, un triangulo o un circulo pero no se que hacer por se hacerlo con un applets pero lo nececito dentro de un jframe que hago

  11. Cristian dice:

    Hay bastantes ejemplos aquí:

    http://casidiablo.net/java

    Un saludo!

  12. JUAN DAVID dice:

    hola lo que pasa es que nececito el algoritmo del tetris terminado sin los errores de ejcucion pero me ley ya todo la guia(5) de tetris con netbeans y tengo todos los ficheros ya lo hice pero me ocurrn dos errores cuando la doy file new y ya ha terminado de caer todas las fichas me aparece error y tambien cuandio lo acerco a la pared y lo giro se revienta o se que hacer y nececito tambian las mejoras me vendria bin una explicacion. GRACIAS

  13. ham dice:

    oe amigo necesito q me ayudes con un problema me an pedido q haga un triangulo hueco utilizando metodos como lo aria soy nuevo sto

¡Déjanos tu comentario!