Foro de elhacker.net

Programación => Java => Mensaje iniciado por: alvk4r en 29 Junio 2007, 15:42 pm



Título: Mirando se Aprende.......... (Ejemplos Java)
Publicado por: alvk4r en 29 Junio 2007, 15:42 pm
Bueno... amigos... creanme, yo he aprendido un monton compilando codigos de aqui y alla, y luego observando el comportamiento del programa o pasandolo el depurador.......

Debido a que me he enfrascado en un proyecto serio con Java (buscando la forma de implementar este lenguaje en las escuelas de nivel medio y superior relacionadas a la informatica)... he ido elaborando algunos ejercicios y ejemplos....

Por ahora solo les traigo un ejemplo....

Comprobar si un numero dado es primo.


Código
  1. //Descripcion: Programa  que permite comprobar si un numero dado es primo.            
  2. //Autor: alvk4r                                                                                                                    
  3. //Uso: java PrimeCheck [numero]
  4. import java.lang.*;
  5.  
  6. public class PrimeCheck {
  7.  public static void main(String[] args) {
  8.    int N = Integer.parseInt(args[0]);
  9.    int mod, i = 0;
  10.    int[] primes = { 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,
  11.      73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,
  12.      173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,
  13.      271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,
  14.      383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,
  15.      491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,
  16.      613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,
  17.      733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,
  18.      857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,
  19.      983,991,997,1009,1013,1019,1021,1031,1033,1039,1049,1051,1061,1063,1069,
  20.      1087,1091,1093,1097,1103,1109,1117,1123,1129,1151,1153,1163,1171,1181,
  21.      1187,1193,1201,1213,1217,1223,1229,1231,1237,1249,1259,1277,1279,1283,
  22.      1289,1291,1297,1301,1303,1307,1319,1321,1327,1361,1367,1373,1381,1399,
  23.      1409,1423,1427,1429,1433,1439,1447,1451,1453,1459,1471,1481,1483,1487,
  24.      1489,1493,1499,1511,1523,1531,1543,1549,1553,1559,1567,1571,1579,1583,
  25.      1597,1601,1607,1609,1613,1619,1621,1627,1637,1657,1663,1667,1669,1693,
  26.      1697,1699,1709,1721,1723,1733,1741,1747,1753,1759,1777,1783,1787,1789,
  27.      1801,1811,1823,1831,1847,1861,1867,1871,1873,1877,1879,1889,1901,1907,
  28.      1913,1931,1933,1949,1951,1973,1979,1987,1993,1997,1999};
  29.    boolean ver = true;
  30.  
  31.    while ((i <= 303) && (primes[i] < N)) {
  32.      mod = N % primes[i];
  33.      if (mod == 0) {
  34.        ver = false;
  35.        break;
  36.      }
  37.      i++;
  38.    }
  39.  
  40.    if (ver == false){
  41.    System.out.println("El numero " + N + " es divisible por " + primes[i]);
  42.    System.out.println("El numero " + N + " no es primo.");
  43.    }
  44.    else
  45.      System.out.println("El numero " + N + " probablemente sea primo.");
  46.  }
  47. }


Mas adelante le implementare el metodo Rabin-Miller, para poder estar mucho mas seguros si el numero es primo o no. Pero bueno, este metodo no me parece mal para empezar, puesto que cerca del 98,5% de los numeros no primos son divisibles por algun numero primo menor que 2000. Aunque da errores con algunos numeros, aun no se por que razon, estos son los menos.

Por si alguien tiene dudas de su funcionamiento este es un ejemplo de como ejecutarlo:

Código:
java PrimeCheck 23543


Título: Sistemas Coordenadas Cartesianas
Publicado por: alvk4r en 29 Junio 2007, 15:54 pm
Estoy elaborando un programa (para mostrar a los alumnos un fin practico de la programacion, aplicado a su entorno) que permita graficar funciones...

Anoche antes de acostarme elabore lo que crei mas necesario hacer primero:
El papel donde debujare los sistemas:

Código
  1. //Descripcion: Dibuja una ventana cuadriculada, que pienso usar mas adelante para desarrollar un Sistema de Coordenadas.
  2. //Autor: alvk4r
  3.  
  4. import javax.swing.*;
  5. import java.awt.*;
  6.  
  7. public class SquaredPaper extends JFrame {
  8.  public void paint(Graphics g) {
  9.    Dimension d = getSize();
  10.    int x = d.width;
  11.    int y = d.height;
  12.  
  13.    g.setColor(Color.yellow);
  14.    g.fillRect(0,0,x,y);
  15.  
  16.    g.setColor(Color.green);
  17.    for (int i = 0; i < y; i+=25) g.drawLine(0,i,x,i);
  18.    for (int i = 0; i < x; i+=25) g.drawLine(i,0,i,y);
  19.  
  20.    g.setColor(Color.red);
  21.    g.drawLine(x/2,0,x/2,y);
  22.    g.drawLine(0,y/2,x,y/2);
  23.  }
  24.  
  25.  public static void main(String args[]) {
  26.    SquaredPaper DrawWindow = new SquaredPaper();
  27.  
  28.    DrawWindow.setSize(500,500);
  29.    DrawWindow.setResizable(false);
  30.    DrawWindow.setLocation(200, 50);
  31.    DrawWindow.setTitle("Sistema de Coordenadas Cartesianas.");
  32.    DrawWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  33.    DrawWindow.setVisible(true);
  34.  
  35.  }
  36. }
  37.  

Normalmente me gusta hacer las aplicaciones graficas ejecutables  (tipo *.exe) y por ello las empaqueto en jar... por si alguien duda como hacerlo, aca le dejo el procedimiento.

Procedimiento para crear el JAR.
Código:
> jar cvfe SquaredPaper.jar SquaredPaper SquaredPaper.class

Por supuesto, primero debemos compilar el fichero.
La opcion e permite definir el Main-Class para el manifest, y asi logramos que nuestra aplicacion sea "clickeable". En este caso el Main-Class es SquaredPaper, que com ven lo paso en la segunda orden, antes de decir que empaquete el *.class.

Espero que a alguien le sirva de algo...


Título: Dibujando en una ventana..........
Publicado por: alvk4r en 29 Junio 2007, 16:17 pm
Código
  1. import javax.swing.*;
  2. //Descripcion: Dibuja graficos en una ventana.
  3. //Autor: alvk4r
  4. import java.awt.*;
  5.  
  6. public class GraphicsDrawWindow extends JComponent {
  7.  public void paint(Graphics g){
  8.    g.setColor(Color.red);
  9.    g.drawString("Esto es una linea:",10,20);
  10.    g.drawLine(10,30,200,30);
  11.    g.drawString("Esto es un rectangulo:",10,60);
  12.    g.drawRect(10,70,190,100);
  13.    g.drawString("Esto es una curva",10,200);
  14.    g.drawArc(10,210,190,100,0,180);
  15.  }
  16.  public static void main(String args[]) {
  17.    JFrame DrawWindow = new JFrame("Sample Window");
  18.    DrawWindow.getContentPane().add(new GraphicsDrawWindow());
  19.    DrawWindow.setSize(220,310);
  20.    DrawWindow.setLocation(100, 150);
  21.    DrawWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  22.    DrawWindow.setVisible(true);
  23.  
  24.  }
  25. }
Otro ejemplito mas... lamento si no comento el codigo.... normalmente no tengo tiempo y soy bastante holgazan en este sentido, excepto cuando desarrollo alguna aplicacion para la empresa, aplicacion que comunmente debo entragar a otros uysuarios y/o desarrolladores.
Puedo aconsejarles compilar los ejemplos, ejecutarlos y tener el apidoc a mano para dudas y consultas........
Como pueden ver tambien estoy dibujando en una ventana, aunque el metodo es difrenta a la aplicacion del papel cuadriculado (SquaredPaper).


Título: Re: Mirando se Aprende..........
Publicado por: alvk4r en 29 Junio 2007, 20:58 pm
jejjeje, recien acabo de ver un post sacado del cajon por egyware (imaginen que es del a~o 2004, que hablaba de un tio que se bajo un codigo de una web, y no sabia que hacer con el...)

Bueno, eso me decidio a poner otro ejemplo, que si bien no es nada del otro mundo, le ense~ara a los novatos como implementar Java en sus Webs.

Sin extenderme mucho, solo digo que la tecnologia Java que se usa para esto es los Applet, tambien estan los Servlets, que pueden ser servidos con el Tomcat y otros servidores de aplicaciones Java, pero bueno, como el caso que me ocupa son los applets.... alla voy. El ejemplo es una adaptacion hecha del programa GraphicsDrawWindow, que ya expuse antes. Solo que en ves de dibujar en una ventana, dibujaremos en el navegador....

Código
  1. import java.applet.Applet;
  2. import java.awt.Graphics;
  3.  
  4. public class GraphicsDrawApplet extends Applet{
  5.  public void paint(Graphics g){
  6.    g.drawString("Esto es una linea:",10,20);
  7.    g.drawLine(10,30,200,30);
  8.    g.drawString("Esto es un rectangulo:",10,60);
  9.    g.drawRect(10,70,190,100);
  10.    g.drawString("Esto es una curva",10,200);
  11.    g.drawArc(10,210,190,100,0,180);
  12.  }
  13. }

Compilamos la aplicacion y luego hacemos una pagina web que la cargue, sin tantos rodeos, sencillamente, este puede ser el codigo de la pagina:
Código
  1. <applet code="GraphicsDrawApplet.class" width="400" height="400" />

Ahh, y atendiendo la solicitud de un mensaje privado... no voy a revelar la fuente... :D aclaro que considero innecesario escribir el nombre del fichero, ya que este es el mismo que la clase publica...
En este caso, si digo que la clase publica es GraphicsDrawApplet, es logico que el fichero se llama GraphicsDrawApplet.java

Salud y a seguir trabajando.


Título: Re: Mirando se Aprende.......... (Ejemplos Java)
Publicado por: marioly en 30 Junio 2007, 02:25 am
Estoy deacuerdo que viendo codigos es una muy buena forma de aprender :) , aunque .. se podrian depurar un poco mas :P , por ejemplo el de los numeros primos, existen formas de determinar si es primo de una manera.. digamos un poco mas "matematica" , partiendo de la idea de que un numero primo es divisible  per se y su unidad :)


Título: Re: Mirando se Aprende.......... (Ejemplos Java)
Publicado por: egyware en 30 Junio 2007, 18:26 pm
yo aprendi asi programando codigos o ejemplos y cambiando algunos numeros y supe para que servia, es la mejor forma de aprender creo yo
pero que hice yo ni me acuerdo!!! :(



PD: sinceramente que post levante que hice ???


Título: Re: Mirando se Aprende.......... (Ejemplos Java)
Publicado por: alvk4r en 2 Julio 2007, 14:16 pm
Vaya, vaya marioly, me estas molestando, ya vi que sucedio con CasiDiablo en un post del 17 de junio. Haces aportes ademas de criticas? Metodos Matematicos no??? No sabes matematicas? A mi me parece que no, si supieras, sabes que ya ando implementandole el metodo de Rabin-Miller.... RABIN-MILLER, sabes lo ques es?
Bueno, no obstante, el metodo que implemente, que a tu vista resalta como poco matematico, es en realidad un axioma, y bastante matematico por cierto. :P

El objetivo del ejemplo es  ense~ar a los usuarios las utilidades de un array, y como se le pueden pasar argumentos a un programa (no teoria de los numeros).... y encontrando numeros primos, funciona, por suspuesto, como eres tan amante de las matematicas, aca te voy a publicar el metodo Rabin-Miller para que lo veas:

Sea p el numero es decir, 2b es la mayor potencia de 2 que divide a (p - 1). Calculamos entonces m, tal-que
que queremos saber si es primo. Se calcula b, siendo b el numero de veces que 2 divide a (p-1):

p = 1 + 2b m.

1. Escoger un numero aleatorio a < p.

2. Sea j = 0 y z = am(mod p).

3. Si z = 1, o z = p - 1, entonces p pasa el test y puede ser primo.
4. Si j > 0 y z = 1, p no es primo.

5. Sea j = j + 1. Si j = b y z = p - 1, p no es primo.
6. Si j < b y z = p - 1, z = z2(mod p). Volver al paso (4).
7. Si j < b y z = p - 1, entonces p pasa el test y puede ser primo.
8. p no es primo.



La probabilidad de que un numero compuesto pase este algoritmo para un numero a es del
25%.

Existen otros metodos como el de Lehmann, pero el de Rabin-Miller es de los mas efectivos y faciles de implementar....

Ahh, como casidiablo, solo tengo Internet en el trabajo, y el tiempo que dedico a postear en el foro esta fuera de las cosas autorizadas.... y como en casa debo hacer otras cosas, pues ya ves... no he tenido tiempo de implementar el algoritmo al programa....

Que tal si lo haces tu marioly? Estoy seguro que te lo agradecerian....

Ahh, tambien soy amante de un codigo limpio, pero no tengo mucho tiempo a veces para simplificar mas de lo que lo hice a la hora que concebi el programa, si esta hecho y funciona, ya esta.... aunque bueno, en algo te doy la razon, pues un codigo supercargado tiende a crear confusiones en su lectura.... no obstante te lo vuelvo a aclarar, mi objetivo es que mis alumnos vean el uso de los arrays, las estructuras for e if y no que aprendan TEORIA DE LOS NUMEROS.

Podrias conservar el metodo que ya esta escrito, y a~adirle el test de Rabin-Miller, asi obtendrias una probabilidad de que el analisis del programa sea correcto, de mas de un 98%.

A los interesados en el tema, les recomiendo hechar un vistazo al libro  Criptografia y Seguridad en Computadores[/url] de Manuel J. Lucena Lopez.
Este es l enlace para descargarlo: http://www.themalia.es/admin/img/documentos/200506281022060.Criptografia.pdf


Título: Array multidimensional
Publicado por: alvk4r en 2 Julio 2007, 16:14 pm
En respuesta a un post de darkxxx (http://foro.elhacker.net/index.php/topic,170280.0.html):
Ejemplo de uso de arrays multidimensionales en Java. El programa suma las filas e imprime los resultados de una matriz de 3x3.

Código
  1. //Descripcion: Suma las filas de una matrix de 3x3, devolviendo el valor de cada fila.
  2. //Autor: alvk4r
  3. public class sumArray {
  4.  public static void main(String[] args) {
  5.    int[][] myMatrix = new int[][] {{5,4,2}, {3,4,8}, {3,7,3}};
  6.    int fila1, fila2, fila3;
  7.  
  8.    fila1 = myMatrix [0][0] + myMatrix [0][1] + myMatrix [0][2];
  9.    fila2 = myMatrix [1][0] + myMatrix [1][1] + myMatrix [1][2];
  10.    fila3 = myMatrix [2][0] + myMatrix [2][1] + myMatrix [2][2];
  11.  
  12.    System.out.println("La fila 1 suma: " + fila1);
  13.    System.out.println("La fila 2 suma: " + fila2);
  14.    System.out.println("La fila 3 suma: " + fila3);
  15.  }
  16. }
  17.  

Bueno, solo queria aclarar que Java no soporta arrays multidimensionales, pero se obtiene la misma funcionalidad haciendo un array de un array, que fue lo que hice...

Esta es  otra variante, usando un bucle, en cuanto tenga un chance hago uno al que podamos pasarle los valores del Array desde la consola. Estoy tratando de implementar un bucle para la suma de los valores........ por ahora solo para imprimirlos, y sustitui para ello las tres variables por un array....

Código
  1. public class SumRowArrayI {
  2.  public static void main (String[] args) {
  3.    int[][] myArray = {{2,4,5}, {2,3,4,}, {9,7,3}};
  4.    int[] row = {
  5.      myArray[0][0] + myArray[0][1] + myArray[0][2],
  6.      myArray[1][0] + myArray[1][1] + myArray[1][2],
  7.      myArray[2][0] + myArray[2][1] + myArray[2][2],
  8.    };
  9.    for (int i = 0; i < row.length; i++)
  10.      System.out.println("El valor de la fila " + i + " es: " + row[i]);
  11.  }
  12. }
  13.  


Título: Obtener los numeros primos usados en el array de PrimeCheck
Publicado por: alvk4r en 2 Julio 2007, 17:10 pm
Cielos!!! me siento un poco corrido, no acostumbro a hablarle asi a una dama, lo siento marioly, pero solo te pido que seas mas cuidadosa con tus criticas..........

Código
  1. public class Primes
  2.  {
  3.    public static void main(String[] args)
  4.      { int N = Integer.parseInt(args[0]);
  5.        boolean[] a = new boolean[N];
  6.        for (int i = 2; i < N; i++) a[i] = true;
  7.        for (int i = 2; i < N; i++)
  8.          if (a[i] != false)
  9.            for (int j = i; j*i < N; j++)
  10.              a[i*j] = false;
  11.        for (int i = 2; i < N; i++)
  12.          if (i > N - 2000)
  13.            if (a[i]) System.out.print(" " + i);
  14.        System.out.println();
  15.      }
  16.  }
  17.  

Claro, podemos unir este codigo con el de PrimeCheck, y guardar la salida en el Array, pero el hecho de tener que estar generando el array, cada vez que uso el programa, lo considero como innecesario, lo genero una vez y ya....


Título: Algoritmo de ordenacion de burbuja.
Publicado por: alvk4r en 2 Julio 2007, 17:54 pm
Supongamos que tenemos un array de datos int, y que queremos ordenarlos de forma ascendente, es decir de menor a mayor, por ejemplo.... como lo hacemos? En estos casos lo mejor es utilizar el algoritmo de ordenacion de burbuja... Este algoritmo realiza comparaciones entre los elementos del array y los ordena... Aca esta un ejemplo:

Código
  1. public class OrdBurbuja {
  2.  
  3.   public static void main (String [] args) {
  4.      int i, b;
  5.      int [] myArray = { 113, 23, 54, -10, -8, 72, 46 };
  6.  
  7.       for (b = 0; b <= myArray.length - 2; b++)
  8.           for (i = 0; i <= myArray.length - b - 2; i++)
  9.                if (myArray [i] >  myArray [i + 1]) {
  10.                    int temp = myArray [i];
  11.                    myArray [i] = x [i + 1];
  12.                    myArray [i + 1] = temp;
  13.                }
  14.  
  15.      for (i = 0; i <  myArray.length; i++)
  16.           System.out.println (myArray [i]);
  17.   }
  18. }
  19.  

Este ejemplo lo saque de un libro de C++ que lei hace uno o dos a~os, era de ediciones O'reilly, y lo reconstrui, segun mi memoria, era algo de Data Structures and Algorithms, y nada, que use ese ejemplo, para guiarme e hice este en Java.


Título: Algoritmo de ordenacion de burbuja ++
Publicado por: alvk4r en 2 Julio 2007, 18:59 pm
Bueno, se que existe un metodo al que le pasas el array, y este lo ordena, pero no lo recuerdo, no obstante, conocer este algoritmo no esta de mas.


Título: Re: Mirando se Aprende.......... (Ejemplos Java)
Publicado por: marioly en 2 Julio 2007, 19:05 pm
Vaya, vaya marioly, me estas molestando, ya vi que sucedio con CasiDiablo en un post del 17 de junio. Haces aportes ademas de criticas?

Si :)
malo que seas tan poco receptivo a criticas u.u, si esperas solo respuestas con "que buen post!" que aburrido, es un poco mediocre, no esperar mejorar con los comentarios u opiniones de los demas, lo que te dije es cierto y no era en mal plan, un metodo tan rigido no es tan bueno.., tener que escibir mas de 300 numeros no es muy practico, intentas enseñar y eso es bueno, pero en java una parte primordial es hacer las cosas practicas, con poco code y reutilizable, que haga lo que debe hacer sin tanta complicacion :) .. sin comentar que el code tiene un margen de error.., asi que es grande e impreciso.
Para mostrar la utilizacion de arrays existen otras formas :P

Citar
Cielos!!! me siento un poco corrido, no acostumbro a hablarle asi a una dama, lo siento marioly, pero solo te pido que seas mas cuidadosa con tus criticas..........
Lo soy, vuelve a leer mi post, fui directa y amable, no dije una mentira, no te insulte ni intente menospreciar tu trabajo, hice una critica solamente, pero (y otra vez) lastima que muchos sean tan poco receptivos a los consejos y criticas  :-\


Título: Re: Mirando se Aprende.......... (Ejemplos Java)
Publicado por: alvk4r en 2 Julio 2007, 19:07 pm
partiendo de la idea de que un numero primo es divisible  per se y su unidad :)
En eso no te falta razon. Los numeros del array los obtuve de esa forma. Pero imaginate si quisiera saber si el numero 42563645 es primo, deberia dividirlo por los 42563644 numeros anteriores? Creeme, demoraria mucho, y en todo caso, como me ha pasado muchas veces con este tipo de bucles, se bloquea la aplicacion... Imagina entonces que para la criptografia fuerte se usan numeros primos de 80 y mas cifras... Oyee, eso es un numerazo, y realmente lo que se hace es un test de primalidad, que basicamente consiste en:

1. Efectuar la division por todos los numeros primos menores que 2000.
2. Si pasa el test, aplicar el test de Rabin-Miller un x numero de veces.

Entre mas veces se haga el test de Rabin-Miller, mas seguros estaremos de si el numero es primo o no. Hay algunos programas que lo efectuan 20 o mas veces.


Título: Que tal si te dijera que uniendo los dos programas?
Publicado por: alvk4r en 2 Julio 2007, 19:16 pm
Uniendo los dos programas, el que use para generar el array y el primecheck, no tendrias que escribir los 300 numeros, ademas, no los escribi, use una macro en el Notepad++ colocarlos de esa forma... (Copie de la consola y luego los pegue en el Notepad++):D
Siguiendo la logica de cada numero primo es divisible solo por si mismo, hubiera podido obtener el array usando un bucle, como ya dije, pero entonces el programa se me complicaba y se hacia mas dificil de entender....

Otra cosa, cortemosla por aqui, te pedi disculpas por ser tan brusco... vale??? Hice este tema para poner ejemplos especificos y no para ir lanzando puyas.... ciertamente me molesto que los 7 post tuyos que me tope eran criticando el trabajo de otros... pero luego vi que tenias razon en parte... si quieres aportar ejemplos, bienvenida!!!!!! si haces una critica constructiva... hazla, pero valida tu critica: si dices que un programa no debe ser asi,o que debio tener esto  o aquello, escribe el programa tal y como crees que sea correcto... creeme, de esa forma asimilare mejor tus criticas, y no solo yo...
Hay un refran que aparece en el Quijote que reza:
"Que el montar caballos a unos hace caballeros y a otros caballerizos"
Y creeme, si validas tus criticas haciendo un aporte... se te puede considerar como una persona critica... si criticas sin mas no mas, pasas a ser lo que aca en Cuba llamamos una criticona....

Anda... hagamos las paces...
Mira, si crees que puedes contribuir en algo, hazlo, me ayudaras a mi, te ayudaras a ti, y a los que lean los post...



Título: Ecuaciones
Publicado por: alvk4r en 2 Julio 2007, 19:30 pm
Alguien sabe como implementar la solucion de ecuaciones de la forma mx2+px+q???
Hace algun tiempo tuve un tutorial de C++ llamado "el diario de Peter Glass", alli venia un programa para esto... en tanto lo busco y lo paso a Java, alguien tiene una idea de como puede hacerse....???
Ya busque en el foro y nada...


Título: Criptografia Base64
Publicado por: alvk4r en 5 Julio 2007, 14:28 pm
Bueno, no recuerdo si era aca o en el foro de C++, alguien inquiriendo por un programa que permitiese cifrar usando el algoritmo de base64. Aca les dejo un ejemplo que saque del libro Java Cryptography. Aunque la clave la genera y guarda en un fichero, y solo cifra cadenas pasadas como argumentos al programa, es facilmente modificable, para que introduzcamos nosotros la llave, y en vez de cifrar/descifrar argumentos de la linea de comandos, hagamos eso con ficheros...

Código
  1. //Fuente: Java Cryptography
  2. //Uso:
  3.      /* cifrar:
  4.             java SecretWriting -e [cadena_texto_plano]
  5.           descifrar:
  6.             java SecretWriting -e [cadena_texto_cifrada]
  7.       */
  8. import java.io.*;
  9. import java.security.*;
  10. import javax.crypto.*;
  11. import sun.misc.*;
  12. public class SecretWriting {
  13.  public static void main(String[] args) throws Exception {
  14. // Check arguments.
  15.    if (args.length < 2) {
  16.      System.out.println("Uso: SecretWriting -e || -d [text]");
  17.      return;
  18.    }
  19. // Get or create key.
  20.    Key key;
  21.    try {
  22.      new FileInputStream("SecretKey.ser"));
  23.      key = (Key)in.readObject();
  24.      in.close();
  25.      }
  26.    catch (FileNotFoundException fnfe) {
  27.      KeyGenerator generator = KeyGenerator.getInstance("DES");
  28.      generator.init(new SecureRandom());
  29.      key = generator.generateKey();
  30.      new FileOutputStream("SecretKey.ser"));
  31.      out.writeObject(key);
  32.      out.close();
  33.    }
  34. // Get a cipher object.
  35.    Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
  36. // Encrypt or decrypt the input string.
  37.    if (args[0].indexOf("e") != -1) {
  38.      cipher.init(Cipher.ENCRYPT_MODE, key);
  39.      String amalgam = args[1];
  40.      for (int i = 2; i < args.length; i++)
  41.        amalgam += " " + args[i];
  42.      byte[] stringBytes = amalgam.getBytes("UTF8");
  43.      byte[] raw = cipher.doFinal(stringBytes);
  44.      BASE64Encoder encoder = new BASE64Encoder();
  45.      String base64 = encoder.encode(raw);
  46.      System.out.println(base64);
  47.    }
  48.    else if (args[0].indexOf("d") != -1) {
  49.      cipher.init(Cipher.DECRYPT_MODE, key);
  50.      BASE64Decoder decoder = new BASE64Decoder();
  51.      byte[] raw = decoder.decodeBuffer(args[1]);
  52.      byte[] stringBytes = cipher.doFinal(raw);
  53.      String result = new String(stringBytes, "UTF8");
  54.      System.out.println(result);
  55.    }
  56.  }
  57. }
  58.  


Título: Re: Algoritmo de ordenacion de burbuja ++
Publicado por: egyware en 16 Agosto 2007, 01:02 am
Bueno, se que existe un metodo al que le pasas el array, y este lo ordena, pero no lo recuerdo, no obstante, conocer este algoritmo no esta de mas.

Si exite uno yo tampoco me acuerdo como se llama pero la lista de array a ordenar debe implementar Comparable y ese implementa un metodo llamado int compareTo(object  o) bueno ahi uno especifica como decir si es igual o mayor o menor (0 para igual  1 para mayor y -1 menor) y es algo asi bueno estan buenos tus ejemplos no los habia visto bien