Java: Liste d'objets

Résolu/Fermé
Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012 - Modifié par Remad le 16/01/2012 à 17:59
Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012 - 17 janv. 2012 à 15:47
(Re)bonjour,

Je suis en train de faire un questionnaire en Java, avec deux types de questions ("MultipleChoiceQuestion" et "TextBasedQuestion") qui dérivent de la classe "Question".

J'aurais voulu savoir comment il était possible dans ma classe "Questionnaire" de faire une liste de questions, les instanciers, et vérifier aussi les exceptions.

Le code en ce moment ressemble à sa (c'est pas beau attention!)

public class Questionnaire  
{  
 private String aswer1Choices[] = {"void", "blou", "blah", "public void setUnit (String unit)"};
 private ArrayList<Question> list = new ArrayList<Question>();  
 public Questionnaire()  
 {  
  try  
  {  
   list  
   list[0] = new TextBasedQuestion("Create a header for a set method for a String variable named 'unit'?", "public void setUnit (String unit)");  
   list[1] = new MultipleChoiceQuestion("Which is the header for a set method for a String variable named 'unit'?", "1", aswer1Choices);  
  }  
  catch (QuestionnaireException e)  
  {  
   System.out.println(e.getMessage());  
  }  
  finally  
  {  
     
  }  
 }  
}  


Cordialement

A voir également:

5 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
16 janv. 2012 à 18:43
Tu ne peux pas utiliser list[0] comme pour un tableau, ici il faut que tu utilises add(E)
1
Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012 680
16 janv. 2012 à 19:34
Merci, mais je fait comment pour instancier un nouvel objet d'un certain type dans la fonction add(E)? Genre
list.add(new TextBasedQuestion("Create a header for a set method for a String variable named 'unit'?", "public void setUnit (String unit)");
?
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015 > Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012
16 janv. 2012 à 19:38
Si tu as bien list de type ArrayList<Question> et TextBasedQuestion extends Question, oui, ça devrait le faire... il faut tester.
0
Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012 680 > Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012
17 janv. 2012 à 14:48
Encore merci!!
0
Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012 680
16 janv. 2012 à 21:47
Sa fonctionne, maintenant, j'aurais une autre petite question, comment on passe un String[] en paramètres? J'ai essayé
new MultipleChoiceQuestion("Question 2", "1", ["1", "2", "3", "4"]);
sa marche pas, pareil avec des accolades et non des crochets.

Constructeur de MultipleChoiceQuestion:
public MultipleChoiceQuestion(String question, String answer, String[] choices) throws QAInputException, ChoicesException
1
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
16 janv. 2012 à 22:01
Deux manières de faire :

public MultipleChoiceQuestion(String question, String answer, String[] choices) 
new MultipleChoiceQuestion("Question 2", "1", new String[] {"1", "2", "3", "4"});

public MultipleChoiceQuestion(String question, String answer, String...choices)
new MultipleChoiceQuestion("Question 2", "1", "1", "2", "3", "4");
0
Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012 680
16 janv. 2012 à 22:08
Ohlala... C'est parfait! J'ai choisi la seconde option, merci beaucoup!!!
0
Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012 680
Modifié par Remad le 17/01/2012 à 13:50
Hello tout le monde,

j'aurais encore une petite question:
Comment je peux faire pour savoir si un objet dans ma
ArrayList<Question> list = new ArrayList<Question>(); 
est de type Question ou MultipleChoiceQuestion (qui dérive de question)?

J'ai un
private String[] choices; 
dans MultipleChoiceQuestion qui n'est pas dans Question. Donc, il faudrait que je sache si l'objet instancié dans la liste est de type Question ou non, pour savoir si je dois récupérer les choix de réponses aussi.

Merci d'avance!
1
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
17 janv. 2012 à 13:53
Tu peux utiliser (X instanceof Y) qui renvoie vrai si X est un objet :
* de la classe Y
* d'une des classes filles (petites-filles...) de la classe Y.
* d'une classe qui implémente l'interface Y.
* d'une classe qui implémente une des interfaces filles (petites-filles...) de l'interface Y.
* d'une des classes filles (petites-filles...) d'une classe qui implémente l'interface Y.
* d'une des classes filles (petites-filles...) d'une classe qui implémente une des interfaces filles (petites-filles...) de l'interface Y.

Question q = list.get(i);

if (q instanceof MultipleChoiceQuestion)
{
    MultipleChoiceQuestion mq = (MultipleChoiceQuestion) q;
    String[] c = mq.choices();
    // ...
}
0
Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012 680
Modifié par Remad le 17/01/2012 à 14:55
Euh... Pourquoi Eclipse me sort une alerte "finally block does not compile normally" ?

for (int i=0; i<theQuestions.getNumberQuestions(); i++)   
{   
    try {   
     if (theQuestions.isMCQ(i)) {   
      System.out.println(i + " is an MCQ");   
     }   
     else   
     {   
      System.out.println(i + " is not an MCQ");   
     }   
    }   
    catch (IndexOutOfBoundsException e){   
     e.printStackTrace();   
    }   
    finally {   
     continue;   
    }   
}
0
Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012 680
17 janv. 2012 à 14:58
J'ai compris, j'en ai pas besoin...
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
17 janv. 2012 à 15:05
Je crois que je ne me suis jamais servi de finally dans aucun de mes programmes...
Mais c'est bien de savoir que ça existe quand même au cas où tu en ais besoin un jour.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012 680
17 janv. 2012 à 15:22
Ceci sera surement ma dernière question: comment dans ma classe Questionnaire, je peux récupérer la String[] qui est crée seulement par une question de type MCQ? J'essaye sa, sa ne veut pas fonctionner, sa me sort que getChoices n'est pas défini dans la classe Question.

public String[] getChoiceAnswerMCQ(int number) {
   if (!isMCQ(number)) {
      throw new QuestionnaireException("Not an MCQ.");
   } else {
      return (list.get(number).getChoices());
   }
}


Je te remercie beaucoup par ailleurs!
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
17 janv. 2012 à 15:31
Je pense que c'est comme tout à l'heure, tu dois caster ta Question en MCQ pour lui appliquer la méthode getChoices :

public String[] getChoiceAnswerMCQ(int number) throws QuestionnaireException
{
    if (isMCQ(number))
        return ((MCQ) list.get(number)).getChoices());
    else
        throw new QuestionnaireException("Not an MCQ.");
}
0
Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012 680
17 janv. 2012 à 15:47
Eh bien mon programme marche nickel! Merci à toi!!
0