Je suis en train d'écrire un système de test et tout ce que je veux faire est de compter combien de secondes l'utilisateur a passé sur cette question. c'est-à-dire que j'imprime la question (standard System.out.println), puis attendez 5 secondes et si dans ces 5 secondes l'utilisateur a répondu (par l'entrée standard), je veux garder cette valeur. Si l'utilisateur n'a pas répondu dans les 5 secondes, il doit ignorer cette question et continuer. Le problème est - im lecture des réponses des utilisateurs via l'objet Scanner, et quelque chose comme in.nextInt() est incontrôlable, je suppose.Recevoir une entrée à un moment précis
Comment puis-je résoudre ce problème? Voici un fragment de mon code sans cette fonctionnalité, pouvez-vous me donner quelques astuces pour l'ajouter?
public void start() {
questions.prepareQuestions(numQuestions);
Scanner in=new Scanner(System.in);
boolean playerIsRight=false,botIsRight=false;
int playerScore=0,botScore=0;
for (int i = 0; i < numQuestions; i++) {
questions.askQuestion(i);
System.out.print("Your answer(number): ");
playerIsRight=questions.checkAnswer(i,in.nextInt()-1); //in.nextInt() contains the answer
botIsRight=botAnswersCorrectly(i + 1);
if(playerIsRight){ playerScore++; System.out.println("Correct!");}
else System.out.println("Incorrect!");
if(botIsRight) botScore++;
System.out.print("\n");
}
if(botScore>playerScore) System.out.println("Machine won! Hail to the almighty transistors!");
else if(playerScore>botScore) System.out.println("Human won! Hail to the power of nature!");
else System.out.println("Tie. No one ever wins. No one finally loses.");
}
Il peut être boiteux, mais si je vais commencer un nouveau fil après avoir posé une question, appelez wait (timeout) et dans le nouveau thread j'attendrai la réponse et après l'avoir reçu, j'appellerai notify() sur l'objet dans thread parent. Est-ce que ça marchera? – Anton
Je viens de vérifier - cela ne fonctionne pas :) – Anton
Vous pouvez rouler votre propre solution en utilisant 'wait' et' notify', mais comme vous l'avez vu, il est difficile de faire les choses correctement. L'utilisation d'un 'BlockingQueue' est à peu près équivalente, mais elle est incluse dans un paquet propre et fiable. – erickson