Java 计时器帮助:为我的AP计算机科学课做一个项目

Java 计时器帮助:为我的AP计算机科学课做一个项目,java,Java,在我们班上,我们正在做一个游戏。用户必须猜测单词和内容。我认为回答我的问题不需要关于游戏的信息。 好的,我想做的是给用户一个时间限制,让他们猜单词。大约15秒。如果用户在15秒内没有猜出单词,他们将失去一个回合。 问题: 我们没有学会如何使用计时器。我用计时器之类的东西做实验。我可以从15点开始倒计时。 在等待用户输入猜测时,我无法检查当前时间。 我不知道如何绕过Stdin.readString,让程序检查时间。 谢谢。您可以使用该类收集用户的输入 如果您还不知道线程是什么,您可能希望避免使用计

在我们班上,我们正在做一个游戏。用户必须猜测单词和内容。我认为回答我的问题不需要关于游戏的信息。 好的,我想做的是给用户一个时间限制,让他们猜单词。大约15秒。如果用户在15秒内没有猜出单词,他们将失去一个回合。 问题:

我们没有学会如何使用计时器。我用计时器之类的东西做实验。我可以从15点开始倒计时。 在等待用户输入猜测时,我无法检查当前时间。 我不知道如何绕过Stdin.readString,让程序检查时间。 谢谢。

您可以使用该类收集用户的输入

如果您还不知道线程是什么,您可能希望避免使用计时器,但是如果您确实想尝试,您可能会对这些类感兴趣


虽然您可能已经知道了,但是您可以从System类中获得时间,例如您有一些选项。正如您所说,您的程序正在等待输入,因此线程很忙。您可以做的是创建一个单独的线程,将计时器传递给该线程,并让它检查计时器。也许是这样的:

public class TimerChecker implements Runnable {
    private Timer timer;
    public TimerChecker(Timer timer) { this.timer = timer; }

    @Override
    public void run() {
      // implement logic here
    }
}
您可以使用以下命令在新线程中调用:

 Timer timer = ...
 new Thread(new TimerChecker(timer)).start();
 // Now you are free to perform your blocking operation in the current thread
 Stdin.readString();

一种方法是,为计时器运行一个单独的线程对象。。。此线程将处理时间的更新,然后在玩家的时间用完时触发某个事件

或者更像,在一个单独的线程中实现一个计数器,其增量由时间步长触发,在本例中,以秒为单位,您可以通过调用sleep来实现

定时器线程对象应保持一个变量,该变量跟踪当前时间

在程序的main方法上,您应该继续检查该变量的值,作为主循环的一个先决条件

想法就在那里,我想,只是一个想法

伪码

class Timer extends Thread{
    int current_time = 0;

    public void run(){
     sleep(1000);
     current_time += 1;
    }

    public void synchronized getCurTime(){
     return current_time;
    }
}



class Game{

  public Game(){

   Timer timer = new Timer();
    timer.start();

   while (timer.getCurTime() <16){
      //get the guess of the user
      //checks if it's correct
      // if it is correct, output you win and break!
   }

  //time runs out

  }

}

使用事件驱动的体系结构如何


.

上下文可能很重要。我假设这是一个控制台程序,而不是GUI,对吗?什么是标准时间?readString?你学习过线程吗?如果不是,也许你应该在一个while循环中执行计时器,该循环也会检查输入。这不是一个很好的方法,但可能程序的目的是显示单个线程的局限性。Stdin.readString是我们学习从用户处读取字符串的方式。它不是GUI,它只是一个基于文本的程序。我不知道线程是什么。如果任务没有要求你使用计时器,那么你需要在并发线程中下功夫,我强烈建议你放弃这个功能。@Sam U我同意Bart Kiers的观点。你需要计时器吗?没有必要让它变得更复杂。那么为什么扫描仪会有帮助呢?@samu我打赌你的Stdin对象可能是scanner类的包装器。我只是提供了一个可能的替代文件。这看起来很有帮助,但实际上很混乱,每个线程可以同时运行到另一个线程。因此,如果一个线程被阻止读取用户输入,那么另一个线程仍然可以自由移动。在这里,TimerChecker可以执行一些操作,例如,在原始线程挂起等待用户输入时检查时间。浏览一下。每个人都在谈论线程,我想我的问题应该是如何使用/什么是线程?如果你的父线程是进程,那么你就是你的父线程。。。线程是另一个执行片段,在我认为调用它的进程的相同内存空间中。。。