我遇到了在一定时间内打印出某个数组的每个值的问题。 例如,我有数组的值:“Value1”,“Value2”,“Value3”。我希望在5秒“Value3”之后输出“Value1”,在5秒“Value3”之后输出。 相反,数组的所有值都是打印输出3次。 如果你可以帮助我,我会非常感激)) 谢谢。
import java.util.Date;
public class Timer2 {
/**
* @param args
*/
public static void main(String[] args) {
long start = new Date().getTime();
for (int i = 0; i < 4; i++) {
new java.util.Timer().schedule(new java.util.TimerTask() {
public void run() {
String[] arrayElements = { "value1", "value2", "value3",
"value4" };
for (int i = 0; i < arrayElements.length; i++)
System.out.println(arrayElements[i]);
}
}, new Date(start));
start += 1000;
}
}
}
答案 0 :(得分:3)
做你想描述的最简单的方法是:
public static void main(String[] args) throws InterruptedException {
String[] arrayElements = { "value1", "value2", "value3", "value4" };
for (int i = 0; i < arrayElements.length; i++) {
System.out.println(arrayElements[i]);
Thread.sleep(5000);
}
}
如果你必须使用TimerTask,那么你可以这样做:
public static void main(String[] args) throws InterruptedException {
String[] arrayElements = { "value1", "value2", "value3",
"value4" };
long start = System.currentTimeMillis();
for (int i = 0; i < arrayElements.length; i++) {
final String value = arrayElements[i];
new java.util.Timer().schedule(new java.util.TimerTask() {
public void run() {
System.out.println(value);
}
}, new Date(start));
start += 5000;
}
}
答案 1 :(得分:3)
我在使用scheduleAtFixedRate:
的交叉帖子中回答的问题import java.util.Timer;
import java.util.TimerTask;
class Timer2 {
private static final String[] ARRAY_ELEMENTS = {"value1", "value2", "value3", "value4"};
public static void main(String[] args) {
final Timer utilTimer = new Timer();
utilTimer.scheduleAtFixedRate(new TimerTask() {
private int index = 0;
public void run() {
System.out.println(ARRAY_ELEMENTS[index]);
index++;
if (index >= ARRAY_ELEMENTS.length) {
utilTimer.cancel();
}
}
}, 5000L, 5000L);
}
}
答案 2 :(得分:0)
您将打印循环放在TimeTask.run()中,因此在执行时,所有值都会立即打印出来。您需要做的是为每个数组元素创建一个时间任务。类似的东西:
String[] arrayElements = {"value1", "value2", "value3", "value4"};
for (final String arrayElement : arrayElements)
{
new java.util.Timer().schedule(
new java.util.TimerTask()
{
public void run()
{
System.out.println(arrayElement);
}
},
new Date(start)
);
start+=1000;
}
希望这有帮助。