Я пытаюсь сделать мини-матрицу. Все, что он должен делать, это стрелять либо в 0, либо в 1. Код для этого хорош, но я пытаюсь заставить его сделать обратный отсчет в начале (3,2,1 - затем начинается). Он вызывается в другом файле через activate()
.Проблемы с функцией таймера
Что не работает таймер. По какой-то причине, он ставит 0 перед первым 3:
03
2
1
Как и не активирует функцию матрицы. Вот код, если кто-нибудь сможет мне помочь.
import java.util.Timer;
import java.util.TimerTask;
public class Matrix {
public boolean matrix = true;
static int interval;
static Timer timer;
public String activate() {
String done = "";
timer();
return done;
}
private void matrix() {
while(matrix) {
System.out.print((int) (Math.random()+0.5));
pressEnterToContinue();
}
}
private void timer() {
System.out.println("press ENTER to stop\n"+
"starting in");
int delay = 1000;
int period = 1000;
timer = new Timer();
interval = 3;
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
System.out.println(setInterval());
}
}, delay, period);
matrix();
}
private static final int setInterval() {
if (interval == 1) {
timer.cancel();
}
return interval--;
}
private void pressEnterToContinue() {
try
{
System.in.read();
matrix = false;
}
catch(Exception e) {}
}
}
Просто FYI, то pressToContinue() предполагается завершить время цикла, нажав кнопку ENTER.
только что обнаружил, что 0 в начале относится к 'matrix()'. Не могу понять, почему он был активирован. – kwolff7
Причина, по которой она активирована, - это не дождаться завершения таймера до вызова матрицы. Попробуйте использовать ScheduledExecutorService, который позволит вам подождать. – Learner