Java: Liste d'objets

Résolu
Remad Messages postés 1662 Date d'inscription   Statut Membre Dernière intervention   -  
Remad Messages postés 1662 Date d'inscription   Statut Membre Dernière intervention   -
(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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention   711
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > Remad Messages postés 1662 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   711 > Remad Messages postés 1662 Date d'inscription   Statut Membre Dernière intervention  
 
Encore merci!!
0
Remad Messages postés 1662 Date d'inscription   Statut Membre Dernière intervention   711
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention   711
 
Ohlala... C'est parfait! J'ai choisi la seconde option, merci beaucoup!!!
0
Remad Messages postés 1662 Date d'inscription   Statut Membre Dernière intervention   711
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention   711
 
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   Statut Membre Dernière intervention   711
 
J'ai compris, j'en ai pas besoin...
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention   711
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention   711
 
Eh bien mon programme marche nickel! Merci à toi!!
0