英文:
Why doesn't my timer print every second that passes?
问题
I wanted to make a code that printed every second that passes in my timer for a total of 30 seconds (hence why I made a for loop) however it just repeatedly prints 1, so I am guessing that my for loop isn't working and it isn't appending 1 to the variable score. Any suggestions on what I should do? Thanks.
我想制作一个代码,每秒打印一次,总共打印30秒(所以我使用了一个for循环),但它只不断地打印1,所以我猜我的for循环不起作用,也没有将1追加到变量score。有什么建议吗?谢谢。
英文:
I wanted to make a code that printed every second that passes in my timer for a total of 30 seconds (hence why I made a for loop) however it just repeatedly prints 1, so I am guessing that my for loop isn't working and it isn't appending 1 to the variable score. Any suggestions on what I should do? Thanks.
public class TimerSchedule {
public static void main(String[] args) {
// creating timer task, timer
Timer t = new Timer();
TimerTask tt = new TimerTask() {
@Override
public void run() {
for(int i=0; i<30;i++)
{
int score = 0;
score ++;
System.out.println(score);
}
};
};
t.scheduleAtFixedRate(tt,0,1000);
}
}
答案1
得分: 0
打印 1
的原因是因为你将以下两个语句放在了 for
循环内部:
int score = 0;
System.out.println(score);
第一个语句会在每次迭代中重置 score
,而第二个语句会在每次迭代中打印更新后的 score
值。第一个语句应该放在 run()
外部。此外,当 score
达到 30
时,你需要取消计时器。
下面是更新后的代码:
import java.util.Timer;
import java.util.TimerTask;
public class Main {
public static void main(String[] args) {
Timer t = new Timer();
TimerTask tt = new TimerTask() {
int score = 0;
@Override
public void run() {
System.out.println(++score);
if (score == 30) {
t.cancel();
}
};
};
t.scheduleAtFixedRate(tt, 0, 1000);
}
}
输出结果:
1
2
3
...
...
...
29
30
英文:
The reason why it is printing 1
is that you have put the following two statements inside the for
loop:
int score = 0;
System.out.println(score);
The first one is resetting score
in every iteration while the second one prints the updated value of score
in each iteration. The first one should be put outside run()
. Also, you need to cancel the timer when the value of score
reaches 30
.
Given below is the updated code:
import java.util.Timer;
import java.util.TimerTask;
public class Main {
public static void main(String[] args) {
Timer t = new Timer();
TimerTask tt = new TimerTask() {
int score = 0;
@Override
public void run() {
System.out.println(++score);
if (score == 30) {
t.cancel();
}
};
};
t.scheduleAtFixedRate(tt, 0, 1000);
}
}
Output:
1
2
3
...
...
...
29
30
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论