Lecture d'une chaine avec comptes a rebours
Fermé
m_bess
Messages postés
6
Date d'inscription
samedi 12 mars 2016
Statut
Membre
Dernière intervention
19 décembre 2017
-
3 nov. 2016 à 15:14
tarek_dotzero Messages postés 817 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 12 avril 2022 - 15 nov. 2016 à 22:07
tarek_dotzero Messages postés 817 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 12 avril 2022 - 15 nov. 2016 à 22:07
A voir également:
- Comment mettre un compte à rebours sur whatsapp
- Whatsapp - Guide
- Un contact vous a bloqué dans WhatsApp ? Voici comment en avoir le cœur net - Accueil - Messagerie instantanée
- Votre compte WhatsApp sera bloqué dans quelques jours si vous n'activez pas cette option - Accueil - WhatsApp
- Comment créer un groupe whatsapp - Guide
- Comment recuperer un message supprimé sur whatsapp - Guide
3 nov. 2016 à 23:11
4 nov. 2016 à 19:40
Dans les deux cas, tu peux savoir si ça fait 8s ou moins que l'utilisateur fait son choix.
Si ça fait moins de 8s, le thread s'arrête tout seul (sortie de boucle). Sinon, il faudra gérer ça (arrêt du programme ?)
15 nov. 2016 à 20:52
Donc voila j'ai testé plusieurs codes et lu plusieurs cours avec ma binôme et voila où nous sommes arrivés
classe Timer:
import java.util.concurrent.atomic.AtomicBoolean;
public class Timer extends Thread{
public void run() {
long time=0L;
while (! isInterrupted())
{
time = System.currentTimeMillis();
try
{
// 8 secondes d'attente
Thread.sleep(8000);
}
catch (InterruptedException e)
{
Thread.currentThread().interrupt();
break;
}
System.out.println("temps ecoulé");
break;
}
}
}
class lire:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.concurrent.atomic.AtomicBoolean;
public class Lire extends Thread
{
private String nom ="motatester";
public static String chaine() throws InterruptedException
{
String tmp = "";
char C='\0';
try
{
while ((C=(char) System.in.read()) !='\n')
{
if (C !='\r')
{
tmp = tmp+C;
}}}
catch (IOException e)
{
System.out.println("Erreur de frappe");
System.exit(0);
}
return tmp;
}
public static String chaine2(){
Scanner s =new Scanner (System.in);
String tent =s.next();
return tent;
}
public boolean TestChaine(String ch){
boolean res;
if (ch.equals(nom)){
System.out.println("Bravo! Le mot est correct");
res=true;}
else res=false;
return res;
}
}
et la class Main:
import java.io.InputStream;
import java.util.Scanner;
import java.util.concurrent.atomic.AtomicBoolean;
public class Main {
public static void main(String[] args) throws Exception{
AtomicBoolean resultat = new AtomicBoolean();
Lire l =new Lire ();
String tentative;
int i=1;
Boolean stop =false;
while (i<=5 && stop==false ){
System.out.println("la valeur de i est "+" " +i);
Unthread th=new Unthread();
th.start();
System.out.println("Saisir votre mot !");
tentative=l.chaine();//saisie
if (l.TestChaine(tentative))
{
stop=true;
break;
}
th.interrupt();
th.join();
if (i<5 )
System.out.println("Le mot est incorrect ! passons a la "+" "+(i+1)+" "+" ème tentative");
i=i+1;
}
}
}
mon problème est : en faisant l'exécution à chaque tentative si j'entre rien et le temps est écoulé le programme ne passe pas a la ième tentative et il faut que je tape quelque chose au clavier pour qu'il passe à la tentative suivante .
Je veux simplement que si aucun mot est entré et si le temps est écoulé il passe tout seul à la tentative suivante .
j'ai utilisé System.in.read() pour la saisie du mot et cette méthode permet de lire seulement un caractère alors j'ai opté pour une classe Lire qui utilise cette méthode afin de lire toute une chaine
15 nov. 2016 à 21:35
15 nov. 2016 à 22:07
Continuons avec la même idée mais avec une petite différence : la lecture se fait dans un thread contrôlé.
Dans le code que vous citez, le pauvre Thread Timer n'a aucune puissance et aucun contrôle sur la lecture qui est bloquante (elle bloque l'excution) alors il faut lui donner un peu de pouvoir, si vous mettez le code de lecture dans un thread contrôlé par le Timer, il peut l'arrêter au bout de 8 secondes :
Dans le ThreadLecture, la méthode run() doit effectuer la lecture et mettre le résultat dans une variable static par exemple.
Alors ce qui va se passer : si le ThreadLecture fait la lecture alors il se termine normalement sinon il sera "tué" après la fin de Thread.sleep(8000).