我有一个在条件为false时运行的线程。对于每一秒都是假的,然后它将增加1秒的时间,然后返回该时间。我的问题是,在代码的末尾,它不返回任何输出,也就是说,没有整数变量返回到输出。
注意:对于此程序,假设用户正确猜出了数字,并且胜利为真。
编辑:代码执行()已添加到while win = false
Thread thread = new Thread() {
public int run(boolean win){
int time = 0;
while(win == false) {
try {
time++;
Thread.sleep(1000);
}
catch(Exception e) {
}
}
return time;
}
};
public void execute() {
thread.start();
}
当win为false时,此线程继续增加,然后返回win为true时的时间值。
public void userGuessNumber() {
boolean win = false
[...] // Options Menu Code - timer should not increment for this section
while(win == false) {
execute();
if(guess == number) {
win = true;
}
[...] // Do some code
}
}
当用户正确猜出数字时,胜利为真。那是线程应该停止递增的时候。然后下面是方法输出时间:
public void outputInfo() {
System.out.print("The time it had taken to guess the number: ");
execute();
}
编辑代码:我在while循环中添加了execute();我的逻辑是我希望线程只在用户开始猜测一个数字时开始计数。我在outputInfo方法中的execute()语句中打算打印从线程运行时生成的数字,但我相信这可能在语义上是不正确的。
execute是一个运行线程代码的方法,但由于某种原因,输出为空,并且不返回任何内容。
相反,我希望它返回在胜利达到真之前已经过的时间数。
答案 0 :(得分:1)
这真的不是正确使用线程。多线程应该用于事件处理或具有较长的后台进程,例如下载。
您可以使用System.currentTimeMillis()
轻松跟踪时间,将其分配给变量,然后您就可以获得以毫秒为单位的时间差异。如果你想要它在几秒钟内,只需除以1000.
这是一个片段:
public void userGuessNumber() {
boolean win = false
[...] // Options Menu Code - timer should not increment for this section
long guessNumberStarted = System.currentTimeMillis();
int timeElapsed = 0;
while (!win) {
if (guess == number) {
win = true;
timeElapsed = (int)(System.currentTimeMillis() - guessNumberStarted) / 1000;
}
}
[...] // Do some code
}
不仅缩短了代码,也没有在后台运行任何不需要的代码,并且您可以更准确地计算传递的时间,前提是您将变量设置为double或long