2017-10-09 11 views
1

J'ai une classe de questions avec différentes sections - certaines sections sont montrées à l'utilisateur en fonction d'autres réponses. La section 1 est toujours répondue. Section 2 & 3 sont seulement répondues dans certains cas.Sections de questions comme sous-classe en Java

Comment dois-je mieux « groupe » ces questions afin que je puisse facilement vérifier le nombre total de vraies réponses dans un groupe donné (contient true/false) et vérifier que les sections a chaque question répondue?


Les données dans les questions REVIENT d'une interface Web dans un projet de printemps. Je pense que les valeurs possibles sont true, false ou null.

@Entity 
public class LicenseApplication { 
    // Section 1 
    private boolean question1; 
    private boolean question2; 

    //Section 2 
    private boolean question3; 
    private boolean question4; 
} 
+2

définissent une classe 'Section' et de mettre votre toutes les exigences en elle – Jerry06

+0

comme les classes imbriquées? –

+0

plus comme 2 classes séparées qui s'utilisent ... –

Répondre

0

Vous pourriez faire quelque chose de semblable à ce qui suit

class Section 
{ 
    public List<Question> questions; 
    //... 
} 

class Question 
{ 
    public boolean isCorrect; 
    //... 
} 

public boolean entireSectionCorrect(Section section) 
{ 
    for (int i=0; i<section.questions.size(); i++) { 
     if(!section.questions[i].isCorrect) 
      return false; 
    } 

    return true; 
} 
+0

Deux choses: 1) Vous renvoyez 'void' au lieu de' bool' dans la signature de la méthode. 2) Vous devriez 'return-early' au lieu de maintenir une variable' result' ... Pour cela, débarrassez-vous de toutes les références 'result', et faites'/* à l'intérieur de for-loop */if (! Section.questions [i] .isCorrect) return false;/* après for-loop */return vrai; ' – XenoRo

+0

@AlanCPSC désolé j'ai édité la question après votre réponse. Souhaitez-vous coder les questions pour chaque section dans le tableau des questions? –

+0

@DougGreaney Fondamentalement, la seule chose que sa réponse n'adresse pas (directement) si «afin que je puisse facilement vérifier le nombre total de vraies réponses dans un groupe donné» --- Cela peut facilement être accompli avec une «boucle de comptage» très semblable à l'implémentation actuelle de la méthode 'wholeSectionCorrect':'/* méthode signature = int */int count = 0; pour (Question question: questions) if (question.isCorrect) compte ++; return count; ' – XenoRo

0

@AlanCPSC a une bonne suggestion, que corriger quelques petites choses

class Section 
{ 
    private List<Question> questions; 
    public int getCount() 
    {  
     int count=0; 
     for(Question quest : questions) 
     { 
      boolean answer = quest.getAnswer().get(quest.getQuestion()); 
      boolean answered = quest.getAnswered().get(quest.getQuestion()); 
      if(answer == answered) 
      { 
       count++; 
      } 
     } 
     return count; 
    } 
    ... 
} 

class Question 
{ 
    private String question; 
    private Map<String, Boolean> answer; // correct answer 
    private Map<String, Boolean> answered; // answered by candidate 
    ... 
} 
+0

Peut-être que je me trompe, mais je ne sais pas chose que l'OP est prêt pour l'utilisation de 'private' ou pour' Map' pour l'instant ... Il a déjà du mal à saisir 'array' et' public' après tout ... --- C'est cool de pousser l'OP a peu, mais c'est trop et va juste être confus pour lui/elle en ce moment, à mon humble avis. – XenoRo

+0

Non MCQ - Vrai/Faux (Booléen). Et la classe Question est annotée avec @Entity (désolé ajouté après votre réponse) pour la persistance Hibernate. –

+0

@AlmightyR sûrement je peux faire la correction. – Ravi

0

Je suis un peu déçu par la confusion étant faite par le PO et par l'exagération d'autres réponses, alors voici ma prise ...

DISCLAIMER: Je dois Je me suis éloigné de Java pendant un moment maintenant, et j'ai codé ceci par mémoire ... Pardonnez toutes les erreurs (mais faites-les remarquer pour les corriger).


public class Section { 
    public boolean[] questions[]; 

    public Section(int questionAmount){ 
     questions = new boolean[questionAmount]; 
    } 

    public boolean isEveryQuestionAnswered() { 
     for(boolean question : questions) { 
      if(!question) //If any question is not answered. 
       return false; 
     } 

     //If reached this point, all questions were answered, so... 
     return true; 
    } 

    public int totalNumberOfTrues() { 
     int count = 0; 
     for(boolean question : questions) { 
      if(question) //If any question is answered. 
       count++; 
     } 

     //If reached this point, all 'true' questions were accounted for, so... 
     return count; 
    } 
} 

public class LicenseApplication { 
    private Section[] sections = new Section[3]; 

    // Section 1 
    sections[0] = new Section(2); 
    sections[0].questions[0] = false; 
    sections[0].questions[1] = true; 
    //... 
    System.out.println("Section 1 complete: "+sections[0].isEveryQuestionAnswered()) //Prints "Section 1 complete: false" 
    System.out.println("Section 1 total answered: "+sections[0].totalNumberOfTrues()) //Prints "Section 1 total answered: 1" 

    //Section 2 
    sections[1] = new Section(3); 
    sections[1].questions[0] = true; 
    sections[1].questions[1] = true; 
    sections[1].questions[2] = true; 
    //... 
    System.out.println("Section 2 complete: "+sections[1].isEveryQuestionAnswered()) //Prints "Section 2 complete: true" 
    System.out.println("Section 2 total answered: "+sections[1].totalNumberOfTrues()) //Prints "Section 2 total answered: 3" 

    //INSERT [Section 3] here at will... 
}