Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1840 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Nombre aléatoire, arraylist (quizz, question)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Nombre aléatoire, arraylist (quizz, question)

n°2223680
codronpa
Posté le 01-04-2014 à 14:04:02  profilanswer
 

Bonjour,
 
Alors je fais un programme pour un quizz sur les pays. J'ai déjà créé mes classes qui me permettent de lire un fichier texte et stocker les différentes réponses au questions tout ça dans un ArrayList. J'utilise une classe QuizzW qui est ma partie design (IHM). Dans cette classe je voudrais qu'à son ouverture un nombre aléatoire unique se crée (j'ai déjà programmé cette classe Rnd) et que l'on tire au hasard dans ma liste pour ensuite remplir les checkbox (avec les propositions correspondantes, france, ukraine, brésil par exemple), le Jpannel avec l'image associée. Ensuite quant l'on clique sur btn suivant on vérifie si la checkbox cochée est la bonne et on affiche un label de bonne ou mauvaise réponse. Je voudrais démarrer un compteur dans le bouton suivant et quant 20 questions ont été posées on n'arrête et on n'affiche le score.
L'idée serait d'appeler mes méthodes définies dans les éléments de ma liste et remplir les checkbox avec les string. Plus dur, convertir T et F en true and false pour pouvoir vérifier la réponse des gens. Et encore plus dur, comment lui dire dans un Jpannel que l'image est dans mon ArrayList et qu'il doit le lire comme une racine de fichier...???
Je vous joins les codes et classes associées.
 
Si quelqu'un arrive à comprendre le code et à une piste je suis preneur!
 
Exemple d'une ligne de mon fichier.txt :  
 
Roumanie;roumanie.png;Roumanie;T;France;F;Mali;F
 
 
 

Code :
  1. CLASSE QUESTION
  2. public class Question {
  3. private String path;
  4. private String check1;
  5. private String check2;
  6. private String check3;
  7. private String Reponse1;
  8. private String Reponse2;
  9. private String Reponse3;
  10. /**
  11. * Constructeur Question</br>
  12. * @param line : Lige du fichier avec laquelle on construit la question</br>
  13. * @return toutes les données nécessaires à une unique question</br>
  14. */
  15. public Question(String line) {
  16. String[] splitedLine = line.split(";" ); //Découpage en utilisant ; comme séparateur
  17. this.path = splitedLine[2];
  18. this.Reponse1 = splitedLine[3];
  19. this.Reponse2 = splitedLine[5];
  20. this.Reponse3 = splitedLine[7];
  21. this.check1= splitedLine[4];
  22. this.check2= splitedLine[6];
  23. this.check3= splitedLine[8];
  24. }
  25. /**
  26. * Utilisation des getters en raison du private sur les variables string</br>
  27. * Méthode réponse 1 vrai ou fausse</br>
  28. * @return le pays</br>
  29. */
  30. public String getcheck1() {
  31. return check1;
  32. }
  33. /**
  34. * Methode Path (drapeau)</br>
  35. * @return the path</br>
  36. */
  37. public String getPath() {
  38. return path;
  39. }
  40. /**
  41. * Methode Bonne reponse ou non associée à la question 2</br>
  42. * @return Check2</br>
  43. */
  44. public String getCheck2() {
  45. return check2;
  46. }
  47. /**
  48. * Methode Bonne reponse ou non associée à la question 3</br>
  49. * @return Check3</br>
  50. */
  51. public String getCheck3() {
  52. return check3;
  53. }
  54. /**
  55. * Methode réponse 1</br>
  56. * @return Reponse1</br>
  57. */
  58. public String getReponse1() {
  59. return Reponse1;
  60. }
  61. /**
  62. * Méthode réponse 2</br>
  63. * @return Reponse2</br>
  64. */
  65. public String getReponse2() {
  66. return Reponse2;
  67. }
  68. /**
  69. * Méthode de la question 3</br>
  70. * @return Reponse3</br>
  71. */
  72. public String getReponse3() {
  73. return Reponse3;
  74. }
  75. }
  76. CLASSE JEU
  77. import java.io.BufferedReader;
  78. import java.io.FileReader;
  79. import java.util.ArrayList;
  80. import java.util.List;
  81. /**
  82. * @author Codron Pierre-Antoine</br>
  83. * @author Brunet Mathias</br>
  84. * Code du jeu 25/02/2014</br>
  85. * Classe Jeu comportant la boucle principale</br>
  86. * Permet de lister les données (ArrayList) : pour pouvoir ensuite d'indicer la liste</br>
  87. * Utilisation des getters et setters pour rendre accessible les données de list question</br>
  88. */
  89. public class Jeu {
  90. // Cette variable doit etre definie en dehors de la main, sa portee est importante
  91. static int h=0;
  92. //Cette variable doit etre definie en dehors de la main, sa portee est importante
  93. static int i;
  94. // Score
  95. private static int scr=0;
  96. //Liste des questions
  97. private List<Question> listeQuestion;
  98. // compteur qui va nous permettre de poser 20 questions
  99. private static int cpt=0;
  100. public static int donnerscore() {
  101. return scr;
  102. }
  103. /**
  104. * Constructeur Jeu</br>
  105. * Permet de remplir l'array</br>
  106. */
  107. public Jeu() {
  108. listeQuestion = new ArrayList<Question>(); // IMPORTANT : la liste ne peut comporter que des méthodes de Question!!
  109. String chemin = "Questions.txt";
  110. try {
  111. BufferedReader buf = new BufferedReader(new FileReader(chemin));
  112. String ligne;
  113. while ((ligne = buf.readLine()) != null)// Découper ligne à ligne le fichier texte
  114. {
  115. Question q = new Question(ligne);
  116. System.out.println(q.toString());
  117. listeQuestion.add(q); // ajoute les éléments dans la liste des questions
  118. }
  119. buf.close();
  120. } catch (Exception ie) {
  121. ie.printStackTrace();
  122. }
  123. }
  124. public List<Question>getListQuestion()
  125. {
  126. return listeQuestion; // L'array liste est privée, il faut donc ajouter des getters pour récupérer la valeur de listeQuestion, la génération des getters entraînent la génération des setters que l'on peut supprimer car inutiles
  127. }
  128. }
  129. CLASSE NOMBRE ALEATOIRE
  130. public Rnd(int n, int nMax) throws ExceptionParametrageErroné
  131. {
  132. if (n > nMax)
  133. throw new ExceptionParametrageErroné();
  134. tirage = new ArrayList<Integer>(n);
  135. Random random = new Random();
  136. Date t = new Date();
  137. random.setSeed(t.getTime());
  138. // Ajout des nombres
  139. tirage.add(random.nextInt(nMax));
  140. for (int i = 1; i < n; i++)
  141. {
  142. int r = random.nextInt(nMax);
  143. int j = 0;
  144. while (j < i)
  145. {
  146. if (tirage.get(j) == r)
  147. {
  148. r = random.nextInt(nMax);
  149. j = 0;
  150. continue; // on reboucle sur le while
  151. }
  152. j++;
  153. }
  154. // nombre unique : on l'ajoute à la liste
  155. tirage.add(i, r);
  156. }
  157. // Initialisation de l'itérateur sur la liste
  158. listIterator = tirage.iterator();
  159. }
  160. /**
  161. * Tirage d'un nombre aléatoire
  162. * @return nombre aléatoire
  163. */
  164. public int next()
  165. {
  166. return listIterator.next();
  167. }
  168. /**
  169. * Détermine si tous les nombres ont été obtenu
  170. * @return vrai s'il reste un ou plusieurs nombres
  171. */
  172. public boolean hasNext()
  173. {
  174. return listIterator.hasNext();
  175. }
  176. /**
  177. * Réinitialise le parcours de la liste
  178. */
  179. public void reset()
  180. {
  181. listIterator = tirage.iterator();
  182. }
  183. public String toString()
  184. {
  185. return tirage.toString();
  186. }
  187. // Programme de test
  188. public static void main(String[] arg)
  189. {
  190. try
  191. {
  192. // Génération d'une liste de 5 nombres aléatoires uniques [0..4]
  193. Rnd rnd = new Rnd(5, 10);
  194. // Affichage avec la méthode toString
  195. System.out.println(rnd);
  196. // Affichage en balayant la liste
  197. while (rnd.hasNext())
  198. System.out.print(rnd.next()+ ", " );
  199. // Nouveau parcours de la liste
  200. rnd.reset();
  201. // Nouveau tirage
  202. rnd = new Rnd(5, 10);
  203. System.out.println();
  204. while (rnd.hasNext())
  205. System.out.print(rnd.next()+ ", " );
  206. }
  207. catch (ExceptionParametrageErroné e)
  208. {
  209. e.printStackTrace();
  210. }
  211. }
  212. }
  213. ET ENFIN LA CLASSE OU JE BLOQUE JEU GRAPHIQUE (la plateforme)
  214. import java.awt.Color;
  215. public class JeuW extends Jeu {
  216. private JFrame frame;
  217. private JFrame global;
  218. private static Rnd ramdon;
  219. /**
  220. * Create the application.
  221. */
  222. public JeuW(JFrame global)
  223. {
  224. this.global = global;
  225. initialize();
  226. frame.setVisible(true);
  227. }
  228. /**
  229. * Initialize the contents of the frame.
  230. */
  231. private void initialize() {
  232. frame = new JFrame();
  233. frame.setIconImage(Toolkit.getDefaultToolkit().getImage(JeuW.class.getResource("/javax/swing/plaf/metal/icons/ocean/computer.gif" )));
  234. frame.getContentPane().setBackground(new Color(124, 252, 0));
  235. frame.getContentPane().setForeground(new Color(123, 104, 238));
  236. frame.setBounds(100, 100, 515, 357);
  237. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  238. frame.getContentPane().setLayout(null);
  239. // Rnd prend des valeurs uniques de 1 à 20, soit 20 valeurs différentes
  240. try {
  241. ramdon = new Rnd(1, 20);
  242. } catch (ExceptionParametrageErroné e) {
  243. e.printStackTrace();
  244. }
  245. // Affichage des drapeaux
  246. JPanel drapeaux = new JPanel();
  247. drapeaux.setToolTipText("" );
  248. drapeaux.setBounds(134, 0, 206, 134);
  249. frame.getContentPane().add(drapeaux);
  250. //JLabel image_drap = new JLabel(new ImageIcon(tab[num][2]));
  251. // drapeaux.add(image_drap);
  252. // En cas de bonne réponse affichage de ce label
  253. final JLabel BR = new JLabel("Bonne r\u00E9ponse" );
  254. BR.setForeground(new Color(50, 205, 50));
  255. BR.setFont(new Font("Lucida Grande", Font.PLAIN, 29));
  256. BR.setHorizontalAlignment(SwingConstants.CENTER);
  257. BR.setBounds(73, 47, 228, 44);
  258. frame.getContentPane().add(BR);
  259. BR.setVisible(false);
  260. // En cas de mauvaise réponse affichage de ce label
  261. final JLabel MR = new JLabel("Bonne r\u00E9ponse" );
  262. MR.setForeground(new Color(50, 205, 50));
  263. MR.setFont(new Font("Lucida Grande", Font.PLAIN, 29));
  264. MR.setHorizontalAlignment(SwingConstants.CENTER);
  265. MR.setBounds(73, 47, 228, 44);
  266. frame.getContentPane().add(MR);
  267. MR.setVisible(false);
  268. // Label pour afficher la question
  269. final JLabel Question = new JLabel("Quelle est le pays correspondant \u00E0 ce drapeau?" );
  270. Question.setForeground(Color.BLUE);
  271. Question.setVerticalAlignment(SwingConstants.TOP);
  272. Question.setFont(new Font("Dialog", Font.BOLD, 16));
  273. Question.setHorizontalAlignment(SwingConstants.CENTER);
  274. Question.setBackground(Color.WHITE);
  275. Question.setBounds(36, 156, 416, 35);
  276. frame.getContentPane().add(Question);
  277. // Checkbox réponse 1
  278. final JCheckBox Rep1 = new JCheckBox("New check box" );
  279. Rep1.setBackground(new Color(127, 255, 0));
  280. Rep1.setBounds(135, 198, 97, 23);
  281. frame.getContentPane();
  282. Rep1.setBorderPainted(false);
  283. Rep1.setContentAreaFilled(false);
  284. Rep1.setFocusPainted(false);
  285. // Checkbox réponse 2
  286. final JCheckBox Rep2 = new JCheckBox("New check box" );
  287. Rep2.setBackground(new Color(127, 255, 0));
  288. Rep2.setBounds(135, 233, 97, 23);
  289. frame.getContentPane().add(Rep2);
  290. Rep1.setBorderPainted(false);
  291. Rep1.setContentAreaFilled(false);
  292. Rep1.setFocusPainted(false);
  293. // Checkbox réponse 3
  294. final JCheckBox Rep3 = new JCheckBox("New check box" );
  295. Rep3.setBackground(new Color(127, 255, 0));
  296. Rep3.setBounds(135, 267, 97, 23);
  297. frame.getContentPane().add(Rep3);
  298. Rep1.setBorderPainted(false);
  299. Rep1.setContentAreaFilled(false);
  300. Rep1.setFocusPainted(false);
  301. //Bouton continuer pour passer à la question suivante
  302. final JButton Bsuivant = new JButton("Continuer" );
  303. Bsuivant.setForeground(new Color(0, 0, 0));
  304. Bsuivant.setIcon(null);
  305. Bsuivant.setBackground(new Color(127, 255, 0));
  306. Bsuivant.addActionListener(new ActionListener() {
  307. public void actionPerformed(ActionEvent arg0) {
  308. Bsuivant.setEnabled(false);
  309. MR.setVisible(false);
  310. BR.setVisible(false);
  311. Question.setVisible(true);
  312. // On reinitialize après chaque réponse les checkbox à l'état vide
  313. Rep1.setEnabled(true);
  314. Rep2.setEnabled(true);
  315. Rep3.setEnabled(true);
  316. Rep1.setSelected(true);
  317. Rep2.setSelected(true);
  318. Rep3.setSelected(true);
  319. }
  320. });
  321. Bsuivant.setBounds(409, 278, 80, 30);
  322. frame.getContentPane().add(Bsuivant);
  323. Bsuivant.setVisible(true);
  324. // Bouton pour accéder à l'aide
  325. JButton btnNewButtonSuivant = new JButton("" );
  326. btnNewButtonSuivant.setForeground(new Color(127, 255, 0));
  327. btnNewButtonSuivant.setIcon(new ImageIcon(JeuW.class.getResource("/com/sun/java/swing/plaf/windows/icons/Question.gif" )));
  328. btnNewButtonSuivant.setBackground(new Color(127, 255, 0));
  329. btnNewButtonSuivant.addActionListener(new ActionListener() {
  330. public void actionPerformed(ActionEvent arg0) {
  331. frame.setVisible(false);
  332. Aide_durant_jeu j = new Aide_durant_jeu(frame);
  333. }
  334. });
  335. btnNewButtonSuivant.setBounds(10, 11, 80, 30);
  336. frame.getContentPane().add(btnNewButtonSuivant);
  337. }
  338. }

mood
Publicité
Posté le 01-04-2014 à 14:04:02  profilanswer
 

n°2223702
willy le k​id
Posté le 01-04-2014 à 15:19:20  profilanswer
 

Convertir une chaine en boolean, mais mets 'true' ou 'false' dans le fichier mieux que T ou F

Code :
  1. boolean b = Boolean.valueOf("true" ).booleanValue();


 
Pour invoquer une méthode d'une classe, la méthode étant connue par une String, on utilise la reflection.
C'est pratique, cela est fonctionnellement puissant mais gourmand en ressources  
et peu maintenable lors du debuggage de grosses applis. Bref à éviter si tu es au boulot.
Autrement regardes
http://ricky81.developpez.com/tuto [...] eflection/
et en particulier :
 

Code :
  1. Object lancerMethode(Object o, Object[] args, String nomMethode) throws Exception
  2. {
  3.   Class[] paramTypes = null;
  4.   if(args != null)
  5.   {
  6.     paramTypes = new Class[args.length];
  7.     for(int i=0;i<args.length;++i)
  8.     {
  9.       paramTypes[i] = args[i].getClass();
  10.     }
  11.   }
  12.   Method m = o.getClass().getMethod(nomMethode,paramTypes);
  13.   return m.invoke(o,args);
  14. }


 
 
Ton code est pas trop mauvais, suffisament modulaire, mais évites les accents dans les noms de méthode (ExceptionParametrageErroné)

n°2223708
codronpa
Posté le 01-04-2014 à 15:38:33  profilanswer
 

D'accord, merci pour ta réponse! Et tu me conseil de faire les conversions dans le constructeur de ma classe question pour n'avoir qu'à les faire qu'une seule fois ou à chaque fois que je les utilise?  
 
Je début en Java donc je ne suis pas très performant et la reflection me paraît trop compliquée à utiliser surtout que mes données sont stockées dans une array liste. Et le but était de simplement utiliser un indice avec un get pour pouvoir récupérer facilement les données dans mes autres classes. Je pensais qu'un "extends nom de la classe" me permettrai d'accéder à ma liste et d'en récupérer les données mais apparemment non?

n°2223724
willy le k​id
Posté le 01-04-2014 à 16:22:43  profilanswer
 

Je te cite : L'idée serait d'appeler mes méthodes définies dans les éléments de ma liste
Donc méthode définie sous forme de String, de la j'en déduits que tu veux faire de la reflection,
sans affirmer que c'est la meilleure solution à ton problème.

 
codronpa a écrit :

Et tu me conseil de faire les conversions dans le constructeur de ma classe question pour n'avoir qu'à les faire qu'une seule fois ou à chaque fois que je les utilise?

 

Une seule fois. Dans le constructeur

 


codronpa a écrit :

Et le but était de simplement utiliser un indice avec un get pour pouvoir récupérer facilement les données dans mes autres classes.

 

Tu as essayé et cela fonctionne ? je ne vois pas ce que tu veux faire.

 
codronpa a écrit :

Je pensais qu'un "extends nom de la classe" me permettrai d'accéder à ma liste et d'en récupérer les données mais apparemment non?


Accéder aux attributs protected ou public, c'est une chose ...
Les classes héritant de Jeu "extends jeu" ne pourront pas accèder à la liste listeQuestion  : l'attribut est private.
Tu me diras qu'il y a un getter, mais si tu utilises le getter tu n'as pas besoin du extends  , ou plutôt tu fais une mauvaise utilisation de l'héritage


Message édité par willy le kid le 01-04-2014 à 16:34:07
n°2223730
codronpa
Posté le 01-04-2014 à 16:45:54  profilanswer
 

C'est bon j'ai réussi pour le constructeur ça donne :  
 

Code :
  1. this.Check1 = Boolean.valueOf(splitedLine[4] ).booleanValue();


 
ça m'a l'air d'être plutôt correct!  
 
Bah justement je crée une Array List dans le but de pouvoir l'utiliser dans ma classe "graphique", mais je n'arrive pas à récupérer les données de l'array listQuestions, c'est juste un problème de syntaxe je pense qu'il existe une ligne de code qui permet de remplir un Jpannel avec les éléments d'une liste. Et il me semble que les ArrayList sont indicé, je m'explique avec cet exemple :  
Si j'écris ça :  
ArrayList<String> array_L=new ArrayList<String>();
array_L.add("Lundi" );
 
Comment récupérer "lundi" dans une autre classe qui dont son papa est la classe contenant l'arryList?  
 
Merci du temps que vous prenez, j'aimerai être plus précis dans mes questions mais j'ai du mal avec le vocabulaire.

n°2223734
willy le k​id
Posté le 01-04-2014 à 17:01:44  profilanswer
 

On dit pas "papa" mais c'est la maman : la classe mère exactement.
 
http://docs.oracle.com/javase/7/do [...] yList.html
méthode get(int i) : Returns the element at the specified position in this list.
 
Tu mets la liste à public, et tu fais simplement un listeQuestion.get(0), puis listeQuestion.get(1) etc etc dans la classe fille .... cela implique que les éléments que tu cherches soient toujours dans le meme ordre


Message édité par willy le kid le 01-04-2014 à 17:02:09
n°2223739
codronpa
Posté le 01-04-2014 à 17:18:44  profilanswer
 

D'accord super je vais essayé tout ça!  
J'ai juste une dernière question, je panique parce que depuis deux heures je ne peux plus rien faire et un message d'erreur s'affiche dès que j’exécute mon programme :  
 
Erreur : la méthode principale est introuvable dans la classe JeuW, définissez la méthode principale comme suit :
   public static void main(String[] args)
Est ce vous sauriez ce qui cause ça? J'ai cherché on m'a parlé de bibliothèque jar mal renseignée...

n°2223741
willy le k​id
Posté le 01-04-2014 à 17:33:10  profilanswer
 
n°2223751
codronpa
Posté le 01-04-2014 à 19:19:11  profilanswer
 

Bon j'ai bien avancé sur mon classe JeuW mais j'aurai une autre question : comment récupérer les valeurs qui ont été selectionnée dans une checkbox pour vérifier si elles sont juste, si quelqu'un saurait écrire ce petit bout manquant ou à des pistes??  
 

Code :
  1. import java.awt.Color;
  2. public class JeuW extends Jeu {
  3. private JFrame frame;
  4. private JFrame global;
  5. private static Rnd ramdon;
  6. public int scr=0;
  7. int CptQuestion=1;
  8. /**
  9.  * Create the application.
  10.  */
  11. public JeuW(JFrame global)
  12. {
  13.  this.global = global;
  14.  initialize();
  15.  frame.setVisible(true);
  16. }
  17. public void checkReponse()
  18. {
  19.  //scr++;
  20.  //if (==true)
  21. }
  22. public void CreerNouvelleQuestion()
  23. {
  24.  int indiceQuestionSuivante = ramdon.next()+1;;
  25.  Question questionQuivante = getListeQuestion().get(indiceQuestionSuivante);
  26.  Component[] comps = frame.getComponents();
  27.  for (Component comp : comps)
  28.  {
  29.  if(comp.getName().equals("checkbox1" ))
  30.  {
  31.   listeQuestion.get(3); // ici il y a un soucis il faut que j'arrive à assigner les données dans mes checkbox
  32.  }
  33.  if(comp.getName().equals("checkbox2" ))
  34.  {
  35.   listeQuestion.get(3);
  36.  }
  37.  if(comp.getName().equals("checkbox3" ))
  38.  {
  39.   listeQuestion.get(3);
  40.  }
  41.  frame.repaint();
  42.  }
  43. }
  44. /**
  45.  * Initialize the contents of the frame.
  46.  */
  47. private void initialize() {
  48.  frame = new JFrame();
  49.  frame.setIconImage(Toolkit.getDefaultToolkit().getImage(JeuW.class.getResource("/javax/swing/plaf/metal/icons/ocean/computer.gif" )));
  50.  frame.getContentPane().setBackground(new Color(124, 252, 0));
  51.  frame.getContentPane().setForeground(new Color(123, 104, 238));
  52.  frame.setBounds(100, 100, 515, 357);
  53.  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  54.  frame.getContentPane().setLayout(null);
  55.  // Affichage des drapeaux
  56.  JPanel drapeaux = new JPanel();
  57.  drapeaux.setToolTipText("" );
  58.  drapeaux.setBounds(134, 0, 206, 134);
  59.  frame.getContentPane().add(drapeaux);
  60.  // En cas de bonne réponse affichage de ce label
  61.  final JLabel BR = new JLabel("Bonne r\u00E9ponse" );
  62.  BR.setForeground(new Color(50, 205, 50));
  63.  BR.setFont(new Font("Lucida Grande", Font.PLAIN, 29));
  64.  BR.setHorizontalAlignment(SwingConstants.CENTER);
  65.  BR.setBounds(73, 47, 228, 44);
  66.  frame.getContentPane().add(BR);
  67.  BR.setVisible(false);
  68.  // En cas de mauvaise réponse affichage de ce label
  69.  final JLabel MR = new JLabel("Bonne r\u00E9ponse" );
  70.  MR.setForeground(new Color(50, 205, 50));
  71.  MR.setFont(new Font("Lucida Grande", Font.PLAIN, 29));
  72.  MR.setHorizontalAlignment(SwingConstants.CENTER);
  73.  MR.setBounds(73, 47, 228, 44);
  74.  frame.getContentPane().add(MR);
  75.  MR.setVisible(false);
  76.  // Label pour afficher la question
  77.  final JLabel Question = new JLabel("Quelle est le pays correspondant \u00E0 ce drapeau?" );
  78.  Question.setForeground(Color.BLUE);
  79.  Question.setVerticalAlignment(SwingConstants.TOP);
  80.  Question.setFont(new Font("Dialog", Font.BOLD, 16));
  81.  Question.setHorizontalAlignment(SwingConstants.CENTER);
  82.  Question.setBackground(Color.WHITE);
  83.  Question.setBounds(36, 156, 416, 35);
  84.  frame.getContentPane().add(Question);
  85.  // Checkbox réponse 1
  86.  final JCheckBox Rep1 = new JCheckBox("New check box" );
  87.  Rep1.setBackground(new Color(127, 255, 0));
  88.  Rep1.setBounds(135, 198, 97, 23);
  89.  frame.getContentPane();
  90.  Rep1.setBorderPainted(false);
  91.  Rep1.setContentAreaFilled(false);
  92.  Rep1.setFocusPainted(false);
  93.  // Checkbox réponse 2
  94.  final JCheckBox Rep2 = new JCheckBox("New check box" );
  95.  Rep2.setBackground(new Color(127, 255, 0));
  96.  Rep2.setBounds(135, 233, 97, 23);
  97.  frame.getContentPane().add(Rep2);
  98.  Rep1.setBorderPainted(false);
  99.  Rep1.setContentAreaFilled(false);
  100.  Rep1.setFocusPainted(false);
  101.  // Checkbox réponse 3
  102.  final JCheckBox Rep3 = new JCheckBox("New check box" );
  103.  Rep3.setBackground(new Color(127, 255, 0));
  104.  Rep3.setBounds(135, 267, 97, 23);
  105.  frame.getContentPane().add(Rep3);
  106.  Rep1.setBorderPainted(false);
  107.  Rep1.setContentAreaFilled(false);
  108.  Rep1.setFocusPainted(false);
  109.  //Bouton continuer pour passer à la question suivante
  110.  final JButton Bsuivant = new JButton("Continuer" );
  111.  Bsuivant.setForeground(new Color(0, 0, 0));
  112.  Bsuivant.setIcon(null);
  113.  Bsuivant.setBackground(new Color(127, 255, 0));
  114.  Bsuivant.addActionListener(new ActionListener() {
  115.   public void actionPerformed(ActionEvent arg0) {
  116.    Question.setVisible(true);
  117.    checkReponse();
  118.    if (CptQuestion < 20)
  119.    {
  120.     CreerNouvelleQuestion();
  121.    }
  122.    else
  123.    {
  124.     frame.setVisible(false);
  125.     Affichage_score p = new Affichage_score();
  126.    }
  127.   }
  128.  });
  129.  Bsuivant.setBounds(409, 278, 80, 30);
  130.  frame.getContentPane().add(Bsuivant);
  131.  Bsuivant.setVisible(true);
  132.  // Bouton pour accéder à l'aide
  133.  JButton btnNewButtonSuivant = new JButton("" );
  134.  btnNewButtonSuivant.setForeground(new Color(127, 255, 0));
  135.  btnNewButtonSuivant.setIcon(new ImageIcon(JeuW.class.getResource("/com/sun/java/swing/plaf/windows/icons/Question.gif" )));
  136.  btnNewButtonSuivant.setBackground(new Color(127, 255, 0));
  137.  btnNewButtonSuivant.addActionListener(new ActionListener() {
  138.   public void actionPerformed(ActionEvent arg0) {
  139.    frame.setVisible(false);
  140.    Aide_durant_jeu j = new Aide_durant_jeu(frame);
  141.   }
  142.  });
  143.  btnNewButtonSuivant.setBounds(10, 11, 80, 30);
  144.  frame.getContentPane().add(btnNewButtonSuivant);
  145. }
  146. }

n°2223753
codronpa
Posté le 01-04-2014 à 19:29:41  profilanswer
 

JCheckBox Rep1 = = listeQuestion.get(3); ligne 40 c'est un truc comme ça mais ça me met des erreurs ??

mood
Publicité
Posté le 01-04-2014 à 19:29:41  profilanswer
 

n°2223756
willy le k​id
Posté le 01-04-2014 à 20:20:20  profilanswer
 

Le fait de soumettre le code entier ne signifie pas que je le lise ... pas le temps.
Si tu as du mal à manipuler les checkbox, tu fais un petit tutorial au lieu de poser des questions qui sont en résumé basique, mais dont la réponse ne se fait pas en deux lignes
http://www.java2s.com/Code/Java/Sw [...] oxDemo.htm

 

Autrement il y a une méthode isSelected() sur la checkbox ?


Message édité par willy le kid le 01-04-2014 à 20:22:10
n°2223762
codronpa
Posté le 01-04-2014 à 21:16:50  profilanswer
 

Ok ok..  
Oui j'ai du mal à les manipuler mais dans les tupo je ne trouve pas la façon dont je veux le faire!  
 
Bref je vais chercher!
 
Merci

n°2223765
codronpa
Posté le 01-04-2014 à 22:00:07  profilanswer
 

Bon j'ai une question beaucoup plus précise ça peut être intéressant pour le forum.
J'ai créé deux fonctions qui me permettent de remplir mes checkbox lorsque l'on clique sur suivant et une autre qui me permet de vérifier si la réponse est bonne. Le problème est qu'il ne veut pas prendre mes checkbox (je ne sais pas si c'est un problème de portée ou autre). Est ce que vous pourriez m'indiquer mon erreur?  
Je précise que je ne donne le code que de deux petites classes.
 

Code :
  1. public void checkReponse() //c'est cette fonction qui permettra de vérifier si la check box est vraie ou fausse
  2. {
  3.  if(Rep1.isSelected() == listeQuestion.get(5) )
  4.  {
  5.   scr++;
  6.  }
  7.  if(Rep2.isSelected() == listeQuestion.get(6) )
  8.  {
  9.   scr++;
  10.  }
  11.  if(Rep3.isSelected() == listeQuestion.get(7) )
  12.  {
  13.   scr++;
  14.  }
  15. }
  16. public void CreerNouvelleQuestion()
  17. {
  18.  int indiceQuestionSuivante = ramdon.next()+1;// Génération d'une liste aléatoire unique
  19.  Question questionQuivante = getListeQuestion().get(indiceQuestionSuivante);
  20.  Component[] comps = frame.getComponents();
  21.  for (Component comp : comps)
  22.  {
  23.  if(comp.getName().equals("checkbox1" ))
  24.  {
  25.   Checkbox Rep1 = checkbox( listeQuestion.get(3));
  26.    // Problème pour assigner les valeurs dans mon array liste à mes checkbox
  27.  }
  28.  if(comp.getName().equals("checkbox2" ))
  29.  {
  30.   listeQuestion.get(3);
  31.  }
  32.  if(comp.getName().equals("checkbox3" ))
  33.  {
  34.   listeQuestion.get(3);
  35.  }
  36.  frame.repaint();
  37.  }
  38. }

n°2304928
diddynecrd​n
Posté le 26-08-2017 à 16:45:37  profilanswer
 

Salut tout le monde  :)  :) !!
 
Je vois que sur cette page vous êtes super aidant  :D  !
 
J'ai un problème en ce moment...
 
j'ai également crée un quizz et une fois que j'ai répondu à la dernière question, l'application redémarre.. :sweat:  
 
Du coup je voulais savoir comment faire proposer au joueur de recommencer ou de retourner au menu principal une fois le quizz finit.
 
Je vous montre comment j'ai crée mon quizz pour vous donner le max d'informations:
 
 
 
Je possède deux dossiers java : VoitureQuizz.java (Celui où se situe les nouvelles données que tu m'as indiquées) et VoitureLibrary.java
 
 
 
 
 
 
Le premier:
 
 
package fr.application.amandine.quizz;
 
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
 
import java.util.Scanner;
 
public class VoitureQuizz extends AppCompatActivity {
 
private VoitureLibrary mVoitureLibrary = new VoitureLibrary();
 
 
 
 private TextView mQuestionView;
 private Button mButtonChoice1;
//même chose pour les trois autres boutons
 
 private String mAnswer;
 private int mQuestionNumber = 0;
 
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_voiture_quizz);
 
 
mQuestionView = (TextView) findViewById(R.id.question);
mButtonChoice1 = (Button) findViewById(R.id.choice1);
 //même chose pour les trois autres boutons
 
 
updateQuestion();
 
mButtonChoice1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mButtonChoice1.getText() == mAnswer) {
                    updateQuestion();
Toast.makeText(VoitureQuizz.this, "vrai", Toast.LENGTH_SHORT).show();
} else {
                    Toast.makeText(VoitureQuizz.this, "faux", Toast.LENGTH_SHORT).show();}}});}
 
//même chose pour les trois autres boutons
 
 
private void updateQuestion(){
mQuestionView.setText(mVoitureLibrary.getQuestion(mQuestionNumber));
mButtonChoice1.setText(mVoitureLibrary.getChoice1(mQuestionNumber));
 //même chose pour les trois autres boutons
 
 
mAnswer = mVoitureLibrary.getCorrectAnswer(mQuestionNumber);
mQuestionNumber++;
}
 
 
 
 
 
 
et un deuxième:
 
 
package fr.application.amandine.quizz;
 
import android.support.v7.app.AppCompatActivity;
 
 
public class VoitureLibrary extends AppCompatActivity {
 
private String mQuestions [] = {
"",
"",
"",
};
 
 private String mChoices [] [] = {
            {"","","",""},
{"","","",""},
{"","","",""},
};
 
 
 private String mCorrectAnswers [] = {"","",""};
 
 public String getQuestion (int a) {
        String question = mQuestions [a];
 return question;
}
 
public String getChoice1 (int a) {
        String choice0 = mChoices [a][0];
 return choice0;
}
 
public String getChoice2 (int a) {
        String choice1 = mChoices[a][1];
 return choice1;
}
 
public String getChoice3 (int a) {
        String choice2 = mChoices[a][2];
 return choice2;
}
 
public String getChoice4 (int a) {
        String choice3 = mChoices[a][3];
 return choice3;
}
 
public String getCorrectAnswer (int a) {
        String answer = mCorrectAnswers [a];
 return answer;}}
 
 
 
 
 
 
Si quelqu'un sait comment faire parce qu je suis trop décue que l'appli s'arrête...
Je vous remercie d'avance et prends tous les conseils !!
 
 
 

n°2304929
antiseptiq​ueincolore
ni repris ni échangé
Posté le 26-08-2017 à 17:33:29  profilanswer
 

Ton programme plante. Regarde la stack dans ton android studio, ça te dira tout.
ou pas.
Tu dois avoir un dépassement de tableau pour mQuestionNumber=3


Message édité par antiseptiqueincolore le 26-08-2017 à 17:38:24

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Nombre aléatoire, arraylist (quizz, question)

 

Sujets relatifs
Besoin d'aide su javascool (génération aléatoire d'image)Java ArrayList .set
la distance de levenshtein pour calculer le nombre d'apparition dans uquestion urgente développement Java
question securité d'un site webQuestion pour les conditions et les variables
Fatal error allowed memory size aléatoireCalculer le factorielle d'un nombre. // (Dev-C++)
question fermeture fenêtre (javascript-html)personalisation Tumblr affichage aléatoire
Plus de sujets relatifs à : Nombre aléatoire, arraylist (quizz, question)



Copyright © 1997-2016 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR