IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Création d'une liste pour un Quizz


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 17
    Points : 6
    Points
    6
    Par défaut Création d'une liste pour un Quizz
    Hi everyone :D,

    Je me permets de vous adresser ce message afin de trouver de l'aide pour résoudre mon problème.
    Je suis actuellement en école d'ingénieur et il me faut réaliser un projet de prog' en JAVA. Nous avons décidé de créer un quizz et nous avons réparti les tâches. La mienne est de créer un "programme" de manière à ce qu'il y ait une interface avec les questions et le choix multiple. Jusqu'ici tout va bien.
    Mon problème est le suivant:

    J'ai donc créé ma classe avec les questions et les réponses liées aux autres classes. (ci-joint les photos du programme)
    Il faut que je réussisse à "enlever " les questions déjà sorties. C'est pour cela que je sollicite votre aide. J'avais pour idée de créer une liste et une boucle dans laquelle il est demandée " Une question ( repérée par un numéro) est choisit au hasard, tant que la question apparaît dans la liste alors je choisis une autre question, sinon je la prends !" et il faudrait ajouter aussi le "stockage" de ces questions dans la liste.

    Je me tourne donc vers vous afin de trouver l'aide nécessaire.

    Cordialement,

    Crazy-Frog_67


    PS: Je suppose que ce post est sûrement mal placé, je m'en excuse d'avance


    Voici le programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    package quiz;
     
    public class question_change<numbers>{
     
    	static String ri_question = null;
     
    	static String op1 = null;
     
    	static String op2 = null;
     
    	static String op3 = null;
     
    	static String op4 = null;
     
    	static int solution = 0 ;
     
    	static Quiz_Fenster quiz;
    	static Questions question_classe;
    	static String act_question;
    	numbers p;
     
    	public question_change(){
    		 quiz = new Quiz_Fenster();
    		 newQuestion();
     
    	}
     
    	public static void newQuestion(){
     
    		question_classe = new Questions();
    		act_question = Questions.question;
     
    		parser();
    		otherText();
    	}
     
    	public static void otherText(){
     
     
     
    		quiz.ChangeTextLabel(ri_question);
    		quiz.solution = solution;
    		quiz.ChangeTextButton(1,op1);
    		quiz.ChangeTextButton(2,op2);
    		quiz.ChangeTextButton(3,op3);
    		quiz.ChangeTextButton(4,op4);
    	}
    	public static void parser(){ 
     
    	String[] frage = act_question.split("\\$");
     
    	 for (int x=0; x<frage.length; x++){
     
    		 switch(x) {
     
    		 	case 0:
    			 ri_question = frage[x];
    			 break;
     
    		 	case 1:
    		 	op1 = frage[x];
    		 	break;
     
    		 	case 2:
    		 	op2 = frage[x];
    		 	break;
     
    		 	case 3:
    		 	op3 = frage[x];
    		 	break;
     
    		 	case 4:
    		 	op4 = frage[x];
    		 	break;
     
    		 	case 5:
    		 	solution = Integer.parseInt(frage[x]);
    		 	break;
     
    		 } }
     
     
    	 }
    	}

    Puis la seconde classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    package quiz;
     
     
    public class Questions {
     
    	int hasard;
    	String questions[] = new String[19];
    	static String question;
    	public Questions(){
     
     
    		questions[0] = "To what writer do we owe the character of Boule-de-Suif? ?$Jean-Paul Sartre$Guy de Maupassant$Nicolas Sarkozy$I don't know$2";
    		questions[1] = "What regional council is chaired by Ségolène Royal since 2004?$Alsace$Poitou-Charentes$Picardie$No one$2";
    		questions[2] = "What pope succeeded Jean-Paul II??$Benoit XVI$François First$Benoit XIV$Jean-Paul First$4";
    		questions[3] = "Of what country Tirana is it the capital?$Germany$France$Albania$Serbia$3";
    		questions[4] = "In which city takes place every year the interCeltic Festival?$Paris$Glasgow$Brest$Lorient$4";
    		questions[5] = "How were nicknamed the recruits of strength in the Wehrmacht ?$Les Affreux$Les Taulards$French People$Les Malgré-nous$4";
    		questions[6] = "Who is the father of the girl of Vincent Cassel $Vincent Cassel$Jean-Luc Reichmann$Julien Marie$Elie Yaffa$1";
    		questions[7] = "In geometry, how many sides possess a diamond? $1side$2sides$3sides$4sides$4";
    		questions[8] = "Under which French title as it is known Alfred Hitchcock's movie 'Vertigo' ? $Sueur Froide$Les Dents de la mer$Alerte à Malibu$ Les sombres nuits de Paris $1";
     
    	}
     
    	public int hasard(int min,int max){
     
    		hasard =  (int) (max * Math.random());
     
    		return hasard;
     
    	}
    }
    et le dernier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
     
    Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
     
    	private JLabel question2;
    	private JButton ant[] = new JButton[4];
     
    	Questions question;
    	JFrame w1;
    	question_change<?> change;
    	Object[] options = { "OK"};	
    	int solution;
     
    	int right;
     
    	public Quiz_Fenster(){
     
    		w1 = new JFrame();
     
    		w1.setSize(600,300);
     
    		w1.setLocation((int)(dim.getWidth()-400)/2,(int)(dim.getHeight()-300)/2);
    		w1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		w1.setVisible(true);
     
     
    		w1.setLayout(null);
     
     
    	       ant[0] = new JButton(" - ");
    		   ant[0].setBounds(52,90,200,40);
    		   ant[0].addActionListener(this);
     
    	       w1.add(ant[0]);
     
     
    	       ant[1] = new JButton(" - ");
    			ant[1].setBounds(52,160,200,40);
    			ant[1].addActionListener(this);
    			w1.add(ant[1]);
     
     
    			ant[2] = new JButton(" - ");
    			ant[2].setBounds(250,90,200,40);
    			ant[2].addActionListener(this);
    			w1.add(ant[2]);
     
     
    			ant[3] = new JButton(" - ");
    			ant[3].setBounds(250,160,200,40);
    			ant[3].addActionListener(this);
    			w1.add(ant[3]);
     
    			question2 = new JLabel("Here, There is the question");
    			question2.setBounds(100,15,2500,40);
    			w1.add(question2); 
     
    	}	
    	public static void main(String[] args) {
    			 new question_change<Object>();
     
    	}	
    	public void actionPerformed(ActionEvent e){
     
     
    		if(e.getSource()== ant[0]){
     
    			if (solution == 1){
     
     
    				Message("You're right","Let's go on...");
     
     
    				question_change.newQuestion();
     
     
    			}else{
     
    				Message("You're wrong","Fail...");
     
    			}
    			}
     
     
     
    		if(e.getSource()== ant[1]){
     
     
     
     
    			if (solution == 2){
     
    				Message("You're right","Let's go on...");
     
     
     
    				question_change.newQuestion();
     
    			}else{
    				Message("You're wrong","Fail...");
    			}
    		}
     
     
     
    		if(e.getSource() == ant[2]){
     
    			if (solution == 3){
     
    				Message("You're right"," Let's go on...");
     
     
     
    				question_change.newQuestion();
     
    			}else{
     
    				Message("You're wrong","Fail...");
    			}
    		}
     
     
    		if(e.getSource() == ant[3]){
     
    			if (solution == 4){
     
    				Message("You're right","Let's go on...");
     
     
    				question_change.newQuestion();
     
    			}else{
    				Message("You're wrong","Fail...");
    			}
    		}
     
     
    			}
     
     
    	public void ChangeTextButton(int button,String text){
     
    		ant[button-1].setText(text);
     
    	}
     
    	public void ChangeTextLabel(String text){
    		question2.setText(text);
    	}
     
     
    	public void Message(String Aussage,String info){
    		JOptionPane.showOptionDialog(null, Aussage, info,
     
    		        JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE,
     
    		        null, options, options[0]);
    	}
     
     
    	}

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tu as plusieurs manières de résoudre ton problème :

    1. Comme tu le suggères, on utilisant plutôt un Set, qu'une List, plus optimisée pour la recherche, quelque chose comme ça :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Set<Integer> questionsDejaPosees = new HashSet<>();
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      int numeroDeQuestion;
      do {
         numeroQuestion = tirage();
      }while( questionsDejaPosees.contains(numeroQuestion) ); // tant que la question fait partie des questions déjà posées
      questionDejaPosees.add(numeroQuestion);
    2. Un autre solution est de charger toutes les questions dans une List au préalable et d'en supprimer les questions au fur et à mesure
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
       
      List<String> listQuestions = new ArrayList<>(Arrays.asList(questions)); // attention, cela nécessite que ton tableau soit bien rempli (tu as 19 cases, il faut 19 questions dedans, sinon tu vas avoir à faire attention aux null dans listQuestions
      pour supprimer une question posée :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
       
      listQuestions.remove( numero );
    3. La solution que je préfère est de charger les questions dans une liste et de la mélanger, ainsi pas besoin de supprimer ou quoi, on parcourt la liste mélangée et donc on a les questions dans un ordre au hasard :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      List<String> listQuestions = Arrays.asList(questions);
      Collections.shuffle(listQuestions);
       
      for(String question : listQuestions) {
         //...
      }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Salut,

    Tout d'abord merci de ta réponse rapide,

    A choisir parmi les 3 possibilités, on optera pour la première car le quiz est réalisé en mode " multi-joueur". Il s'agirait donc de ne pas donner la même question à la même personne. Ceci étant, notre quiz comptera une centaine de question. La probabilité que la question soit la même est faible.

    Je vais me pencher sur la première solution et vous tiens au courant,

    Merci infiniment,

    Cordialement,

    Crazy-Frog_67

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Crazy-Frog_67 Voir le message
    A choisir parmi les 3 possibilités, on optera pour la première car le quiz est réalisé en mode " multi-joueur".

    Il s'agirait donc de ne pas donner la même question à la même personne.
    • soit toutes les questions doivent être posées à chaque joueur, et donc il suffit pour les deux autres solutons, que chaque joueur ait sa propre listes de questions.
    • soit les questions sont réparties entre tous les joueurs, et il suffit d'une liste et que chacun pioche dans cette liste commune. Si une même question ne peut revenir pour un seul joueur, elle ne peut revenir, à fortiori, pour n joueurs.

    Les trois solutions fonctionnent donc dans les deux cas.


    Citation Envoyé par Crazy-Frog_67 Voir le message

    Ceci étant, notre quiz comptera une centaine de question. La probabilité que la question soit la même est faible.
    Attention, random est de l'aléatoire (du non prévisible, mais pas du vrai hasard), mais c'est vrai que c'est équiprobable. Mais on est obligé de prendre en compte que la même valeur puisse sortir 2 fois (c'est bien pour ça que tu as ta question à poser). Surtout qu'on obtient un double dont on prend la partie entière : ça multiplie la probalité d'avoir le même nombre. D'ailleurs, à ce sujet, tu as la classe Random qui fourni la méthode qui permet directement d'avoir un entier entre 0 et n. L'intérêt de cette classe est en plus de te permettre de rejouer un scénario avec les mêmes questions dans le même ordre (pratique pour tester/déboguer).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Réponses: 0
    Dernier message: 31/03/2016, 10h21
  2. Réponses: 3
    Dernier message: 05/10/2008, 02h53
  3. Création d'une GDB pour Firebird
    Par ada_b dans le forum Débuter
    Réponses: 2
    Dernier message: 03/12/2004, 07h08
  4. Création d'une liste ...
    Par keryss dans le forum Access
    Réponses: 6
    Dernier message: 21/10/2004, 09h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo