Problemas de tiempo y ficheros en java.

Iniciado por maikmilk, 31 Mayo 2012, 18:06 PM

0 Miembros y 1 Visitante están viendo este tema.

maikmilk

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 (java) [Seleccionar]
for(int i = 0; i > 10; i++)
{
      System.out.print("Hola");
}


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  ;-)

adastra


maikmilk

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.

maikmilk

Un ejemplo.

Código (java) [Seleccionar]
import java.util.*;
import java.util.*;
import java.text.DecimalFormat;
public class Prueba
{
    public static void main(String args[])
    {
      java.util.Date utilDate = new java.util.Date(); //fecha actual
  long lnMilisegundos = utilDate.getTime();
  java.sql.Date sqlDate = new java.sql.Date(lnMilisegundos);
  java.sql.Time sqlTime = new java.sql.Time(lnMilisegundos);
  java.sql.Timestamp sqlTimestamp = new java.sql.Timestamp(lnMilisegundos);
  System.out.println("util.Date: "+utilDate);
  System.out.println("sql.Date: "+sqlDate);
  System.out.println("sql.Time: "+sqlTime);
  System.out.println("sql.Timestamp: "+sqlTimestamp);
 
          DecimalFormat decimal = new DecimalFormat("0");
        java.util.Date fecha = new Date();
        System.out.println("Lista de los "+decimal.format(6)+" primeros números primo de la secuencia de Mersenne");
       
        double contador;
        double i;
        double j;
        for(i = 1; i<=25; i++)
        {
            contador = 0;
            double op = ((Math.pow(2,i))-1);
            for(j = 1; j<= op; j++)
            {
                if((op%j)== 0)
                {
                     contador++;
                }
                else
                {
                   
                }
            }
            if(contador == 2)
            {
                System.out.println("El numero "+decimal.format(op)+" es primo de la secuencia de Mersenne ");
            }
        }
 
 
  long lnMilisegundosDos = utilDate.getTime();
  java.sql.Timestamp sqlTimestampDos = new java.sql.Timestamp(lnMilisegundosDos);
  System.out.println("sql.TimestampDos: "+sqlTimestampDos);
}
}

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 (java) [Seleccionar]
util.Date: Fri Jun 01 12:18:50 CEST 2012
sql.Date: 2012-06-01
sql.Time: 12:18:50
sql.Timestamp: 2012-06-01 12:18:50.591
Lista de los 6 primeros números primo de la secuencia de Mersenne
El numero 3 es primo de la secuencia de Mersenne
El numero 7 es primo de la secuencia de Mersenne
El numero 31 es primo de la secuencia de Mersenne
El numero 127 es primo de la secuencia de Mersenne
El numero 8191 es primo de la secuencia de Mersenne
El numero 131071 es primo de la secuencia de Mersenne
El numero 524287 es primo de la secuencia de Mersenne
sql.Timestamp: 2012-06-01 12:18:50.591


Continuo investigando...alguna idea?

adastra

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.

maikmilk

Cita de: 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.

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

maikmilk

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 (java) [Seleccionar]
import java.util.*;
import java.text.*;
/**
* Calculo de números primos de Mersenne
*
* @author (maikmilk)
* @version (1.0)
*/
public class MersenneFinal
{
    public static void primosMersenneDos(double n)
    {
        DecimalFormat decimal = new DecimalFormat("0");
        System.out.println("De los "+decimal.format(n)+" primeros dígitos naturales\n");
        for(int i = 2; i <= n; i++)
        {
            double op = (Math.pow(2,i))-1;
            boolean primo = true;
            if(op == 2)
            {
                primo = true;
            }
            else
            {
                if(op%2 == 0)
                {
                    primo = false;
                }
                else
                {
                    int x = 3;
                    int raiz =(int)Math.sqrt(op);
                    while(x <= raiz && op%x != 0)
                    {
                        x += 2;
                    }
                       
                    if(x > raiz)
                    {
                        primo = true;
                    }
                    else
                    {
                        primo = false;
                    }
                }
            }
            if(primo == true)
            {
                Calendar tiempo = Calendar.getInstance();
                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));
            }
        }
    }
}