簡體   English   中英

如何創建像手機一樣的秒/毫秒計時器?

[英]How to create a second/millisecond timer like phone?

我對使用Java編程還比較陌生,可以視為新手。 我還有很多東西要學,但是我試圖創建一個帶有倒計時和秒表的迷你乘法游戲。 我希望秒表在倒數計時器顯示“ GO!”后能以秒和毫秒計數。 我想展示玩家解決問題所花費的時間。 我嘗試查找有關如何初始化秒表的教程,但是它似乎沒有初始化。 我知道這一點是因為我打印出了值secondsPassed,最后將其輸出為0。有人可以幫助我修復代碼,以便在“開始!”之后的幾秒鍾和幾毫秒內啟動一個計時器。 並在游戲結束后顯示時間? 謝謝。

import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;

public class Mathgame {


    public static int secondsPassed = 0;

    Timer timer = new Timer();
    TimerTask task = new TimerTask() {

        public void run() {

            secondsPassed++;

        }

    };


    public void start() {


        timer.scheduleAtFixedRate(task,1000,1000);
    }

    public static void main(String[] args) {



        Scanner input = new Scanner(System.in);

        System.out.println("Welcome to 'The Math Game!' Please chose whether you would like to play or not by inputting 'yes' or 'no'.");

        String x = input.nextLine();




        if(x.equals ("no")) {
            System.out.println("Ok! Maybe next time!");

            System.exit(1);
        } else {

            System.out.println("OK! We are starting the game in...");

                    System.out.println("3");

                    try {
                        Thread.sleep(1000); 
                    } catch(InterruptedException ex){

                        System.exit(0);
                    }

                    System.out.println("2");
                    try {
                        Thread.sleep(1000);

                    } catch(InterruptedException ex) {
                        System.exit(0);
                    }

                    System.out.println("1!!");

                    try {
                        Thread.sleep(1000);

                    } catch(InterruptedException ex) {
                        System.exit(0);
                    }


                    System.out.println("Go!");

                    System.out.println("Your timer started!");



                    System.out.println(secondsPassed);


        }

    }

}

我不知道您要做什么,但是我對您的代碼進行了一些修改,使其更加有趣和簡潔...

public class Mathgame {

    // it is not necessary do it static
    public int secondsPassed = 0;

    //alternatively you can use  Timer timer = new Timer(true); if you want to stop timer immediately after method main is finished
    Timer timer = new Timer();
    TimerTask task = new TimerTask() {

        public void run() {

            secondsPassed++;
            // your timer will run this method every 1 sec, so you need to put output here if you want to see changes
            System.out.println("Running my task again. secondsPassed is " +secondsPassed);
        }

    };

    public void start() {
        //this timmer will run your task every 1000ms (1 second) and will start in 1000ms (1 second) after start is called
        timer.scheduleAtFixedRate(task, 1000, 1000);
    }

    // this is main method so it is better to throw exceptions upper then handler them without output
    public static void main(String[] args) throws InterruptedException {


        Scanner input = new Scanner(System.in);

        System.out.println("Welcome to 'The Math Game!' Please chose whether you would like to play or not by inputting 'yes' or 'no'.");

        String x = input.nextLine();

        // it is better to check for 'yes' than for 'no' this is good practice
        if (x.equalsIgnoreCase("yes") || x.equalsIgnoreCase("y")) {

            System.out.println("OK! We are starting the game in...");

            System.out.println("3");

            Thread.sleep(1000);

            System.out.println("2");

            Thread.sleep(1000);

            System.out.println("1!!");

            Thread.sleep(1000);

            System.out.println("Go!");

            //starting your timer, we have to create object of your class first and then run method start
            Mathgame mathgame = new Mathgame();
            mathgame.start();

            System.out.println("Your timer started!");

            //main is finished however there is timer thread which is still working
            // if you want to stop timer immediately after main then you need to build it as 'Timer timer = new Timer(true);'
            // in that case you may put here extra sleep and see how timer is working

            //let wait until timer will count 10 sec
            Thread.sleep(10000);
            //you can check secondsPassed from main too
             System.out.println("This is called from main. secondsPassed value is " + mathgame.secondsPassed);

            System.out.println("Method main is finished");
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM