junio 29, 2013

Números Perfectos

Hola amigos de Buenas Intenciones hoy les traigo a petición de un seguidor de buenas intenciones un programa de Números Perfectos.
Bueno lo primero que debemos saber es ¿QUE ES UN NÚMERO PERFECTO?.

Un número es perfecto si es igual a la suma de todos sus divisores positivos sin incluir el propio número.
Por ejemplo, el número 6 es perfecto. 
El 6 tiene como divisores: 1, 2, 3 y 6 pero el 6 no se cuenta como divisor para comprobar si es perfecto.
Si sumamos 1 + 2 + 3 = 6 
Los siguientes números perfectos después del 6 son 28, 496, 8128, 33550336, 8589869056.
Una vez explicado este punto pasamos al código de nuestro programa.

package buenasintenciones;
/**
 * @author Ivan
 */
import javax.swing.JOptionPane;

public class NumerosPerfectos {
    public static void main(String[] args) {
        int i, suma= 0, numero;
         String numero1 = JOptionPane.showInputDialog("Ingrese el numero del 1 al 10000");
         numero= Integer.parseInt(numero1);
        for (i = 1; i < numero; i++) { 
            if (numero % i == 0) {
                suma = suma + i;   
            }
        }
        if (suma == numero) {  
            JOptionPane.showMessageDialog(null, "El numero es perfecto");
        } else {
            JOptionPane.showMessageDialog(null, "El numero no es perfecto");

        }
    }
}
Bueno lo primero que tenemos que hacer es declarar la libreria JOptionPane para poder insertar nuestros datos más adelante, declaramos el nombre de nuestra clase en este caso es NumerosPerfectos, declaramos nuestro metodo main. En la linea 10 declaramos tres variables de tipo int con su nombre i, suma(esta con un valor inicial de 0) y numero. En la linea 11 declaramos una variable de tipo String con nombre numero1 y la igualamos con nuestro JOptionPane que sirve para insertar datos y colocamos el comentario entre comillas que queremos que nos muestre. En la 12 tenemos que convertir nuestro valor anterior a un valor entero que es igual a un valor de tipo int, esto ya que nuestro JOptionPane recibio un valor de tipo String. en nuestra linea 13 declaramos un ciclo for con las condiciones i=1, donde este valor i van a ser los divisores y los dividira hasta de 1 hasta n-1, en la linea 14 solo declaramos que si el valor de la suma es un un divisor se sume.
En la 18 declaramos nuestra condicion if diciendo que si es el valor de suma es igual a numero sera un valor perfecto y por ultimo nuestras salidas con un JOption de mensajes.

junio 23, 2013

Herencia

Cuando hablamos de la programación orientada a objetos es inevitable tratar con el tema de la Herencia, ya que es una de la principales características de este enfoque. La herencia es una característica que nos permite la creación de clases (subclase) a partir de una clase ya creada (superclase); de modo que cuando estemos creando una clase y decidimos que va a heredar de otra clase ya existente, lo la clase que estamos creando podrá hacer uno de los métodos y atributos de la clase que ya existe (de la cual heredamos).

Ejemplo:

Creamos una clase Persona y una clase Estudiante, distintas una de la otra:
Bien estas son dos diferentes clases por separado, independientes.
Pero pensemos que un estudiante también tiene los mismos atributos y los mismos métodos que una persona, pero una persona no necesita los mismos atributos y métodos que un estudiante. Entonces pensemos en que la clase estudiante puede heredar los métodos y atributos de la clase Persona, de tal modo que podríamos visualizar algo más o menos así:

La clase Estudiante HEREDA de la clase Persona:

El ejemplo anterior es una analogía con personas (un caso cotidiano) para dejar en claro la esencia de la Herencia. Ahora procederé a mostrarles un código de como se maneja la herencia en Java:

junio 21, 2013

Números aleatorios

Los números aleatorios son de mucha utilidad en ciertas ocasiones, ya que, los podemos usar para ciertos programas que necesiten tomar decisiones sin la intervención del usuario. En fin, hoy hablaremos mas concretamente sobre como generar números aleatorios de tipo entero, para esto, hemos realizado el siguiente ejemplo:

//Archivo: NumerosAleatorios.java

import java.util.Random;

public class NumerosAleatorios
{
  public static void main(String args[])
  {
    //Instanciamos la clase Random
    Random num = new Random();
    System.out.println("Numeros aleatorios generados:");
    System.out.println(num.nextInt(10));
    System.out.println(num.nextInt(10));
    System.out.println(num.nextInt(10));
    System.out.println(num.nextInt(10));
  }
}


Bien, ya dentro del main (linea 9) hemos puesto un comentario, en la linea 10 es donde ya instanciamos la clase Random, para poder utilizarla. En la linea 11 hemos puesto una impresión solo para que salga "Numeros aleatorios generados:", en la linea 12 hasta la 15, con ayuda de un System.out.println(); y usando la siguiente instrucción (dentro del System) num.nextInt(10); (num es el nombre de la instancia linea 10). Ahora algo importante, se preguntaran por que hemos puesto un 10 dentro, bueno ese 10 quiere decir, que, nos va a generar números aleatorios del 0.... al 10, si yo quisiera que me generara del 0... al 6 (por ejemplo), solo tendría que poner un 6 ejemplo:

    System.out.println(num.nextInt(6));

Entonces ya solo generaría números aleatorios del 0... al 6.


La salida del programa es la siguiente:


NOTA: Si ejecutan el programa en sus computadoras, la salida sera diferente en cada ejecución puesto que son NÚMEROS ALEATORIOS.

junio 19, 2013

Setters y Getters

Los setter y getters, son métodos de acceso en una clase, estos sirven para establecer y obtener datos de los atributos de nuestra clase, estos dos métodos deben ser públicos:

El método set (traducción al español: "establecer"): nos sirve para asignar un valor (inicializar) a un atributo de nuestra clase, esto se hace de manera directa con este método, como este método no retorna nada, el nombre de este debe ser precedido por void, y siempre debe recibir un parámetro de entrada.
El método get (traducción al español: "obtener"): este tipo de método accede a la clase para retornarnos el valor de algún atributo que queramos, y como ya mencioné, el método get si debe retornar un valor por lo cual el nombre de este método debe ser precedido por el tipo de valor que vamos a retornar con ese método.

A estos métodos se les suele hacer referencia en plural (como el titulo de este post) porque generalmente son más de un método set y get en una clase, y de este modo nos referimos a todo ese tipo de métodos de establecimiento y obtención de información. Bien, estos métodos se ven así en una clase:

junio 16, 2013

Cubo de Rubik en JAVA

Hola amigos de "Buenas Intenciones", en esta le explicare como hacer el cubo de Rubik utilizando las libreria de OpenGL, que es una libreria para graficos por computadora un poco mas avanzada donde utilizaremos codigo en java  3D, con textura, movimientos de cámara, traslación, rotación.

Primero veamos que es OpenGL proporciona una biblioteca básica de funciones para especificar primitivas gráficas, atributos, transformaciones geométricas, transformaciones de visualización y muchas otras operaciones.
Los nombres de las funciones de la biblioteca básica de OpenGL (también llamada de biblioteca del núcleo
de OpenGL) utilizan como prefijo g l , y cada palabra que forma parte del nombre de una función tiene su
primera letra en mayúscula. Los siguientes ejemplos ilustran este convenio de denominación.
                       glBegin,                glClear,             glCopyPixels,                 glPolygonMode

Bueno sin mas que decir empezamos analizando el codigo linea por linea.
NOTA: Todo el codigo es en una sola clase y esta dividido en fragmentos para facilitar el entendimiento.

//Archivo: Rubik.java
//Autor: Ivan Gallardo
import com.sun.opengl.util.Animator;
import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCanvas;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.glu.GLU;
import javax.swing.JFrame;
import com.sun.opengl.util.GLUT;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.File;
import com.sun.opengl.util.texture.Texture;
import com.sun.opengl.util.texture.TextureIO;
import java.io.IOException;

public class Rubik extends JFrame implements KeyListener{
    static GL gl;
    static GLU glu;
    static GLUT glut;
    static GLCanvas canvas;
    private static float rotarX=0;
    private static float rotarY=0;
    private static float rotarZ=0;
    private static float trasladaX=0;
    private static float trasladaY=0;
    private static float trasladaZ=0;
    private Texture cara1, cara2,cara3,cara4, cara5,cara6;
    private static float EscaX=1.0f;
    private static float EscaY=1.0f;
    private static float EscaZ=1.0f;
    private static float EscaXm=1.0f;
    private static float EscaYm=1.0f;
    private static float EscaZm=1.0f;
    static float rojo=0.0f;
    static float verde=0.0f;
    static float azul=0.0f;
Bueno de la linea de comando 3 a la 16 son las librerias necesarias para los diferentes metodos que

junio 11, 2013

Concatenar cadenas

En java para se puede hacer de dos formas, utilizando el método concat o con el operador +.

Para dar una idea mas clara hemos realizado este pequeño programa:



/**
 * @Archivo: Cadenas.java
 * @author Cerecero 
 * @since 11/junio/2013
 */
public class Cadenas 
{
  public static void main(String[] args) 
  {
    String cadena1 = "Bienvenido a ";
    String cadena2 = "Buenas Intenciones";
        
    String cadena3 = cadena1.concat(cadena2);
    String cadena4 = cadena1 + cadena2;
        
    System.out.println(cadena3);
    System.out.println(cadena4);
  }
}

En la linea 11 y 12 hemos declarado e inicializado dos variables de tipo String, en la linea 14 usaremos el método concat, para concatenar (unir) la cadena1 y cadena2, como se puede observar para hacer esto, se declaro una tercera variable (cadena3), en donde se guardara la nueva String, en otras palabras, lo que estamos diciendo en esta linea es: A cadena3 le vas a asignar la cadena1 concatenada con la cadena2.
En la linea 15 estamos haciendo lo mismo, solo que en vez de usar el método concat, estamos usando el signo +. El resultado es el siguiente: