Foro de elhacker.net

Programación => Java => Mensaje iniciado por: maikmilk en 31 Mayo 2012, 18:06 pm



Título: Problemas de tiempo y ficheros en java.
Publicado por: maikmilk en 31 Mayo 2012, 18:06 pm
Estoy programando un código que calcula los números primos de Mersenne, cada vez que encuentro uno lo imprimo por pantalla, los siete primeros número los calcula rapido el octavo tarda 49 segundos...etc

Mi pregunta es la siguiente existe la posibilidad de que cada vez que imprima un numero primo por pantalla a su vez salga la o incluso hora:minutos:segundos hora:minutos:segundos:milisegundos.

Un ejemplo:
Código
  1. for(int i = 0; i > 10; i++)
  2. {
  3.      System.out.print("Hola");
  4. }

NOTA: Código ejemplo.

Lo que yo quiero es que cada vez que se imprima por pantalla la palabra "Hola" incluya la hora:minutos:segundos... del sistema

Y por otra parte lo que necesito saber es si puedo tambien cada vez que imprima por pantalla un "Hola" mandarlo a un .txt, de la siguiente forma:
1. Imprimo Hola por pantalla y lo guardo en un txt
2. Imprimo Hola por pantalla y lo guardo en un txt
3. Imprimo Hola por pantalla y lo guardo en un txt
4. ...
así hasta que el bucle termine

Muchas gracias por las posibles soluciones  ;-)


Título: Re: Problemas de tiempo y ficheros en java.
Publicado por: adastra en 1 Junio 2012, 10:44 am
Lee sobre las clases Calendar y Date
http://docs.oracle.com/javase/7/docs/api/


Título: Re: Problemas de tiempo y ficheros en java.
Publicado por: maikmilk en 1 Junio 2012, 11:24 am
El caso es que lo e intentado con estas dos clases y funciona pero no como yo quiero.
Cuando empieza la ejecución del programa se marca la hora del sistema y cada vez que el bucle hace una pasada e imprime algo por pantalla sale siempre la hora del inicio del programa.
Voy a volver a mirar estas clases, de todas formas muchas gracias.


Título: Re: Problemas de tiempo y ficheros en java.
Publicado por: maikmilk en 1 Junio 2012, 12:27 pm
Un ejemplo.

Código
  1. import java.util.*;
  2. import java.util.*;
  3. import java.text.DecimalFormat;
  4. public class Prueba
  5. {
  6.    public static void main(String args[])
  7.    {
  8.      java.util.Date utilDate = new java.util.Date(); //fecha actual
  9.  long lnMilisegundos = utilDate.getTime();
  10.  java.sql.Date sqlDate = new java.sql.Date(lnMilisegundos);
  11.  java.sql.Time sqlTime = new java.sql.Time(lnMilisegundos);
  12.  java.sql.Timestamp sqlTimestamp = new java.sql.Timestamp(lnMilisegundos);
  13.  System.out.println("util.Date: "+utilDate);
  14.  System.out.println("sql.Date: "+sqlDate);
  15.  System.out.println("sql.Time: "+sqlTime);
  16.  System.out.println("sql.Timestamp: "+sqlTimestamp);
  17.  
  18.          DecimalFormat decimal = new DecimalFormat("0");
  19.        java.util.Date fecha = new Date();
  20.        System.out.println("Lista de los "+decimal.format(6)+" primeros números primo de la secuencia de Mersenne");
  21.  
  22.        double contador;
  23.        double i;
  24.        double j;
  25.        for(i = 1; i<=25; i++)
  26.        {
  27.            contador = 0;
  28.            double op = ((Math.pow(2,i))-1);
  29.            for(j = 1; j<= op; j++)
  30.            {
  31.                if((op%j)== 0)
  32.                {
  33.                     contador++;
  34.                }
  35.                else
  36.                {
  37.  
  38.                }
  39.            }
  40.            if(contador == 2)
  41.            {
  42.                System.out.println("El numero "+decimal.format(op)+" es primo de la secuencia de Mersenne ");
  43.            }
  44.        }
  45.  
  46.  
  47.  long lnMilisegundosDos = utilDate.getTime();
  48.  java.sql.Timestamp sqlTimestampDos = new java.sql.Timestamp(lnMilisegundosDos);
  49.  System.out.println("sql.TimestampDos: "+sqlTimestampDos);
  50. }
  51. }
Se supone que tras la ejecución del bucle el tiempo debería ser diferente puesto que tarda unos segundos y aunque no fuera así los milisegundos deberiá ser diferentes pero no la salido que muestra por pantalla es esta:

Código
  1. util.Date: Fri Jun 01 12:18:50 CEST 2012
  2. sql.Date: 2012-06-01
  3. sql.Time: 12:18:50
  4. sql.Timestamp: 2012-06-01 12:18:50.591
  5. Lista de los 6 primeros números primo de la secuencia de Mersenne
  6. El numero 3 es primo de la secuencia de Mersenne
  7. El numero 7 es primo de la secuencia de Mersenne
  8. El numero 31 es primo de la secuencia de Mersenne
  9. El numero 127 es primo de la secuencia de Mersenne
  10. El numero 8191 es primo de la secuencia de Mersenne
  11. El numero 131071 es primo de la secuencia de Mersenne
  12. El numero 524287 es primo de la secuencia de Mersenne
  13. sql.Timestamp: 2012-06-01 12:18:50.591

Continuo investigando...alguna idea?


Título: Re: Problemas de tiempo y ficheros en java.
Publicado por: adastra en 1 Junio 2012, 12:48 pm
1. Estas usando bases de datos? por que utilizas java.sql.Time y java.sql.Date?
2. Has visto la clase Calendar?
3. Has utilizado Google?

Con una simple búsqueda en internet:
http://carloszuluaga.wikidot.com/articulos:manejo-de-fechas-en-java-i
http://carloszuluaga.wikidot.com/articulos:manejo-de-fechas-en-java-ii


Antes de preguntar, buscar.


Título: Re: Problemas de tiempo y ficheros en java.
Publicado por: maikmilk en 1 Junio 2012, 13:20 pm
1. Estas usando bases de datos? por que utilizas java.sql.Time y java.sql.Date?
2. Has visto la clase Calendar?
3. Has utilizado Google?

Con una simple búsqueda en internet:
http://carloszuluaga.wikidot.com/articulos:manejo-de-fechas-en-java-i
http://carloszuluaga.wikidot.com/articulos:manejo-de-fechas-en-java-ii


Antes de preguntar, buscar.

Precisamente antes de preguntar e buscado y e he llegado a la misma página que tu pero solo a la primera parte que es donde utiliza sql, y no yo no estoy usando base de datos, la segunda parte no la he visto pero después de leerlo ya he encontrado una solución.
Aún así gracias por tu ayuda


Título: Re: Problemas de tiempo y ficheros en java.
Publicado por: maikmilk en 1 Junio 2012, 13:36 pm
Aqui esta el código final.
Con este método calculo los números primos de Mersenne, si sabeis que es vereis que con cualquier ordenador convencional es accesible calcular los ocho primeros primos de Mersenne ya que el noveno primo de Mersenne tiene ni mas ni menos que 19 dígitos, si dejamos el ordenador encendido y operando pues podríamos obtenerlo luego el décimo tiene 31 dígitos...etc

Por si alguien le interesa http://es.wikipedia.org/wiki/N%C3%BAmero_primo_de_Mersenne

El último primo obtenido es 47 y tiene 12.978.189 millones de dígitos ni mas ni menos

Código
  1. import java.util.*;
  2. import java.text.*;
  3. /**
  4.  * Calculo de números primos de Mersenne
  5.  *
  6.  * @author (maikmilk)
  7.  * @version (1.0)
  8.  */
  9. public class MersenneFinal
  10. {
  11.    public static void primosMersenneDos(double n)
  12.    {
  13.        DecimalFormat decimal = new DecimalFormat("0");
  14.        System.out.println("De los "+decimal.format(n)+" primeros dígitos naturales\n");
  15.        for(int i = 2; i <= n; i++)
  16.        {
  17.            double op = (Math.pow(2,i))-1;
  18.            boolean primo = true;
  19.            if(op == 2)
  20.            {
  21.                primo = true;
  22.            }
  23.            else
  24.            {
  25.                if(op%2 == 0)
  26.                {
  27.                    primo = false;
  28.                }
  29.                else
  30.                {
  31.                    int x = 3;
  32.                    int raiz =(int)Math.sqrt(op);
  33.                    while(x <= raiz && op%x != 0)
  34.                    {
  35.                        x += 2;
  36.                    }
  37.  
  38.                    if(x > raiz)
  39.                    {
  40.                        primo = true;
  41.                    }
  42.                    else
  43.                    {
  44.                        primo = false;
  45.                    }
  46.                }
  47.            }
  48.            if(primo == true)
  49.            {
  50.                Calendar tiempo = Calendar.getInstance();
  51.                System.out.println("El número "+decimal.format(op)+" es primo de la secuencia de Mersenne "+tiempo.get(Calendar.HOUR)+":"+tiempo.get(Calendar.MINUTE)+":"+tiempo.get(Calendar.SECOND)+":"+tiempo.get(Calendar.MILLISECOND));
  52.            }
  53.        }
  54.    }
  55. }