سؤال

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


public class Boggle {
    Board board;
    Player player;
    Timer timer;
    boolean active;

    static Scanner in = new Scanner(System.in);

    public Boggle() {
        board = new Board(4);
        timer = new Timer();
    }

    public void newGame() {
        System.out.println("Please enter your name: ");
        String line = in.nextLine(); 
        player = new Player(line);
        active = true;

        board.shuffle();
        System.out.println(board);

        timer.schedule(new timesUP(), 20000);
        while(active) {
            String temp = in.nextLine();
            player.addGuess(temp);
        }
    }


    public void endGame() {
        active = false;
        int score = Scoring.calculate(player, board);
        System.out.println(score);
    }


    class timesUP extends TimerTask {
        public void run() {
            endGame();
        }
    }


    public static void main(String[] args) {
            Boggle boggle = new Boggle();
            boggle.newGame();

    }
}

لدي الفئة المذكورة أعلاه والتي يجب أن تؤدي حلقة لفترة زمنية معينة ثم تستدعي طريقة المثيل بعد ذلك.أحتاج بشكل أساسي إلى تشغيل الحلقة في newGame() لمدة دقيقة أو نحو ذلك قبل استدعاء endGame() في المثيل الحالي.ومع ذلك، باستخدام فئة Timer لست متأكدًا من كيفية استدعاء الطريقة التي أحتاجها في المثيل الحالي لأنني لا أستطيع تمرير أي معلمات إلى طريقة تشغيل المهام الزمنية؟

هل هناك طريقة سهلة للقيام بذلك أم أنني أقوم بهذا بطريقة خاطئة؟(ملحوظة:هذا مشروع وحدة تحكم فقط، ولا توجد واجهة مستخدم رسومية)

==========

تم تحرير الكود

لقد قمت بتغيير الكود إلى ما ورد أعلاه باتباع التوصيات، وهو يعمل تقريبًا كما أتوقع ولكن لا يبدو أن سلسلة الرسائل قد انتهت بشكل صحيح.كنت أتخيل أن الحلقة سوف تموت وسيعود التحكم في النهاية إلى الطريقة الرئيسية.أيه أفكار؟

هل كانت مفيدة؟

المحلول

لأن timesUP (الرجاء تغيير الاسم!) هي فئة داخلية، ولها بالفعل إشارة إلى مثيلها Boggle الذي خلقه.(لن يكون هذا هو الحال إذا تم وضع علامة عليه كـ static.) إذا أردت إنشاء مثيل لـ timesUP المرتبطة بمثيل آخر، ستفعل شيئًا مثل:

otherBoggle.new timesUp();

من المسلم به أنه بناء جملة غريب جدًا :)

هذا لا يحل المشكلة التي حددها مدحت، ولكن هذا يعني أنك لا داعي للقلق بشأن الحصول على مرجع للطبقة الخارجية.اتصل وحسب endGame() من داخل timesUP.run() وسوف نسميها على المثيل المناسب.

نصائح أخرى

لقد قمت بحظر إدخال وحدة التحكم في سلسلة الرسائل.سيتم تحديد وقت التشغيل من خلال ذلك.يمكنك الحصول على إدخال وحدة التحكم في سلسلة منفصلة، ​​وإضافة مؤقت في السلسلة الحالية لإيقاف سلسلة الإدخال بعد دقيقة، واستدعاء this.endGame()

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top