我已经建立了一个测验,可以生成随机数学问题。在我的main方法中,我有一个使用System.currentTimeMillis()方法的while循环。在while循环中我使用Scanner对象中的nextInt()方法。这部分地阻止了计时器的工作。简而言之,我试图给用户10秒钟完成10个简单的数学问题。当计时器用完时我只想计算出用户的分数。请参阅代码以更好地了解我正在做的事情。
int score = 0;
Scanner input = new Scanner(System.in);
QuizGenerator qg = new QuizGenerator();
ArrayList<Question> quiz = qg.generateQuiz();
long startTime = System.currentTimeMillis(); //fetch starting time
while(false||(System.currentTimeMillis()-startTime)<10000) {
for(Question q : quiz) {
System.out.println(q.getQuestion());
int playerAnswer = input.nextInt();
}
}
System.out.println("You scored: " + score);
答案 0 :(得分:0)
您可以通过使用java.util.Timer来完成此操作。例如,
public class QuizeRunner{
int score = 0;
Scanner input = new Scanner( System.in );
QuizGenerator qg = new QuizGenerator();
ArrayList<Question> quiz = qg.generateQuiz();
long startTime = System.currentTimeMillis(); //fetch starting time
//timer
Timer timer = new Timer();
timer.schedule( new TimerTask()
{
@Override
public void run()
{
if ( ( System.currentTimeMillis() - startTime ) / 1000 > 10 )
{
System.out.println( "time out !!. score " + score );
System.exit( 0 );
}
}
}, 1000, 1000 );
//ask questions
for ( Question q : quiz )
{
System.out.println( q.getQuestion() );
int playerAnswer = input.nextInt();
}
System.out.println( "You scored: " + score );
}
答案 1 :(得分:0)
问题是nextInt()是阻塞的,所以只有在知道有用户输入时才想调用它。试试这个:
int qIndex = 0;
System.out.println(quiz.get(qIndex++).getQuestion());
while((System.currentTimeMillis()-startTime)<10000) {
if (System.in.available() > 0) {
int playerAnswer = input.nextInt();
// check answer..
if(qIndex >= quiz.size()) break;
System.out.println(quiz.get(qIndex++).getQuestion());
}
// Allow few milliseconds
Thread.sleep(100);
}