我从互联网上的某个地方找到了这个秒表java代码,但它似乎没有起作用。我想知道如何修复此代码以使其工作。它应该具有启动,停止和重置的功能,并且应该将时间显示为小时:分钟:秒。毫秒(例如:12:35:17.26)。请帮帮我。
public class StopWatch {
private long startTime = 0;
private long stopTime = 0;
private boolean running = false;
public void start() {
this.startTime = System.currentTimeMillis();
this.running = true;
}
public void stop() {
this.stopTime = System.currentTimeMillis();
this.running = false;
}
//elaspsed time in milliseconds
public long getElapsedTime() {
long elapsed;
if (running) {
elapsed = (System.currentTimeMillis() - startTime);
}
else {
elapsed = (stopTime - startTime);
}
return elapsed;
}
//elaspsed time in seconds
public long getElapsedTimeSecs() {
long elapsed;
if (running) {
elapsed = ((System.currentTimeMillis() - startTime) / 1000);
}
else {
elapsed = ((stopTime - startTime) / 1000);
}
return elapsed;
}
//sample usage
public static void main(String[] args) {
StopWatch s = new StopWatch();
s.start();
//code you want to time goes here
s.stop();
System.out.println("elapsed time in milliseconds: " + s.getElapsedTime());
}
}
答案 0 :(得分:3)
答案 1 :(得分:2)
根据您的作业级别,听起来像您的教授希望您使用嵌套循环,这些循环在您从Web中获取的示例中未使用。
我不会给你完整的答案,但它很简单:最外面的循环是几个小时,一个小时内是几分钟,一个是几分钟内几秒,一个是几秒内几毫秒。最内部循环(毫秒)是打印当前时间的循环。
这样的事情:
// 24 hours in a day
for(int hours = 0; hours < 24; hours++)
{
// 60 mins in an hours
for(int minutes = 0; minutes < 60; minutes++)
{
// 60 secs in a min
for(int seconds = 0; seconds < 60; seconds++)
{
// 1000 ms in a sec.
for(int ms = 0; ms < 1000; ms++)
{
System.out.println(hours + ":" + minutes + ":" + seconds + "." + ms);
}
}
}
}
现在让它漂亮并在最里面的循环中添加1毫秒的延迟,你就完成了! :)
答案 2 :(得分:0)
如果你想制作一个秒表,你必须制作一个线程。 Java API声明了线程的所有功能。这是必要的,否则您将无法暂停计时器。这是因为系统在计数上花费了完整的运行时间。
此外,您提供的脚本用于确定某个计算所花费的时间,而不是时间本身。
我建议你制作2个类,1个用于计时器,1个用于GUI。使用标签,启动,停止和重置按钮制作GUI。
接下来,确保定时器类EXTENDS THREAD(或实现Runnable)并使其成为一个线程。接下来实现函数来停止线程或启动线程(开始/停止按钮)。之后重置应该很简单(只需将定时器设置回0)。
StopWatch-class看起来像这样:
public class Stopwatch extends Thread
{
private long startTime;
private boolean started;
public void startThread()
{
this.startTime = System.currentTimeMillis();
this.started = true;
this.start();
}
public void run()
{
while (started)
{
// empty code since currentTimeMillis increases by itself
}
}
public int[] getTime()
{
long milliTime = System.currentTimeMillis() - this.startTime;
int[] out = new int[]{0, 0, 0, 0};
out[0] = (int)(milliTime / 3600000 );
out[1] = (int)(milliTime / 60000 ) % 60;
out[2] = (int)(milliTime / 1000 ) % 60;
out[3] = (int)(milliTime) % 1000;
return out;
}
public void stopThread()
{
this.started = false;
}
}
在GUI类中,您将启动调用'startThread',停止调用StopWatch.stop(); (这是一个Thread函数)并重置调用reset()。
这应该让你开始使用基本的秒表。其用法的一个(坏)示例:
public static void main(String[] args) throws InterruptedException
{
Stopwatch s = new Stopwatch();
s.startThread();
while (true)
{
int[] curTime = s.getTime();
System.out.println(curTime[0] + " : " + curTime[1] + " : " + curTime[2] + " : " + curTime[3]);
}
}
在线程类之外的currentTimeMillis上进行计算实际上更为明智。