Quiero escribir una clase de temporizador que cuente cada segundo hasta 0, pero parece contar demasiado rápido. ¿Qué estoy haciendo mal?

public class Eieruhr {

    private int x;

    public Eieruhr (int x){
        this.x = x;
    }

    public static void main(String[] args){
        Eieruhr eu = new Eieruhr(10);
        eu.start();
    }

    public void start(){
        for(int i = 0; i <= x; x--){
            long s = System.nanoTime();
            while( ((System.nanoTime() - s) / 100000000) < x);
            System.out.println("tick - " + x);

        }
    }
}
0
Politics Student 19 oct. 2019 a las 03:25

1 respuesta

La mejor respuesta

Le sugiero que utilice TimeUnit.SECONDS.sleep(1). Eche un vistazo al código:

public class Eieruhr {
    private int x;

    public Eieruhr(int x) {
        this.x = x;
    }

    public static void main(String[] args) throws InterruptedException {
        Eieruhr eu = new Eieruhr(10);
        eu.start();
    }

    public void start() throws InterruptedException {
        for (int i = 0; i < x; i++) {
            TimeUnit.SECONDS.sleep(1);
            System.out.println(new Date() + " tick - " + i);
        }
    }
}

Salida:

Sat Oct 19 15:11:37 EEST 2019 tick - 0
Sat Oct 19 15:11:38 EEST 2019 tick - 1
Sat Oct 19 15:11:39 EEST 2019 tick - 2
Sat Oct 19 15:11:40 EEST 2019 tick - 3
Sat Oct 19 15:11:41 EEST 2019 tick - 4
Sat Oct 19 15:11:42 EEST 2019 tick - 5
0
i.bondarenko 19 oct. 2019 a las 12:13