Dúvida: Contagem de tempo

2 respostas
T

Pessoal, estou com o seguinte problema:
to querendo contar o tempo (em segundos) que o usuário leva para digitar algo.

Pensei na seguinte forma:
Uso a classe Date para pegar a hora do sistema antes de mandar o usuário digitar algo, pego o hora do sistema depois do usuário digitar e o tempo gasto será a diferença dos dois tempos.

Exemplo:

import java.io.DataInputStream;
import java.util.Date;

public class Teste{

public static void main(String args[]) throws Exception

{

DataInputStream A = new DataInputStream(System.in);

Date date = new Date();

int s1, m1, s2, m2;
m1 = date.getMinutes(); //minutos antes
	s1 = date.getSeconds(); //segundos antes
	
	System.out.println("digite algo e tecle entre : ");
	A.readLine();
	
	date = new Date();
	m2 = date.getMinutes(); //minutos depois
	s2 = date.getSeconds(); //segundos depois

	//soma dos minuto transformado em segundos
	s1 = (m1 * 60) + s1; 
	s2 = (m2 * 60) + s2; 

	//mostrar a diferença entre os dois tempos
	System.out.println("Tempo = " + (s2 - s1)  + " segundos.");
}

}

Eu sei que o código está bugado, caso s2 seja menor que s1 o tempo será negativo, sem falar que o usuário pode alterar a hora do sistema para enganar o programa (que eh a minha maior preocupação), por isso não estou querendo usar essa forma.

Enfim, Qual a melhor forma de fazer isso?
A classe Date trabalha não só com horas, mas com datas também e, nesse caso, não preciso de datas. Existe outras classes mais específicas para trabalhar com tempo?

Grato.

2 Respostas

C

E ae!

Cara… Tem várias maneiras de fazer o que você esta querendo fazer… A resposta mais rápida que tenho em mente agora, é criar um Timer, fazer um schedule, e de tempo em tempo, você vai incrementando uma variável, esse tempo vai variar de acordo com o que você precisa medir, milisegundos, segundos, etc… Segue o código abaixo como fazer isso (utilizei como medida os segundos)…

import java.util.TimerTask;
import java.util.Timer;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class TempoDigitacao
{
	int segundos = 0;

	public TempoDigitacao()
	{
		int intervalo = 1000;

		TimerTask task = new TimerTask()
		{
			public void run()
			{
				segundos++;
			}
		};

		Timer timer = new Timer();
		timer.schedule(task, 0, intervalo);

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		String str = "";

		try
		{
			str = br.readLine();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}

		System.out.println("Você demorou " + segundos + " segundos para digitar " + str);

		timer.cancel();
	}

	public static void main(String[] args)
	{
		new TempoDigitacao();
	}
}

Isso é… Partindo do pressuposto que você está utilizando o console como entrada de dados do usuário. Por que senão, se você estiver utilizando interface gráfica ai já são outros 500, há mais maneiras ainda de se fazer isso… Mas enfim… Ta aí um código simples e fácil…

Qualquer dúvida posta aí!

FlwZ!

[]'s

T

Valeu cara, eh exatamente isso que estou precisando.

BRIGADÃO.

Criado 5 de julho de 2006
Ultima resposta 5 de jul. de 2006
Respostas 2
Participantes 2