6
votes

Fichier texte aléatoire lu en Java

J'essaie de lire un fichier texte en Java, essentiellement un ensemble de questions. Avec quatre choix et une réponse. La structure ressemble à ceci:

question

option A

Option B

Option C

option d

réponse

Je n'ai aucune difficulté à le lire de cette façon: xxx

Le code ci-dessus est prévisible. La boucle juste incréments. Et il affiche les questions basées sur la commande.

Ce que je veux faire, c'est être capable de randomiser dans le fichier texte, mais de maintenir toujours la même structure. (Q, A, B, C, D, ANS). Mais quand j'essaie de faire cela: xxx

et c'est la méthode que j'utilise pour randomiser: xxx

Il y a la possibilité que je reçois une nulle. Que pouvez-vous recommander que je ferais de pouvoir que je n'obtiens pas null lorsque vous essayez de randomiser les questions?

Pouvez-vous voir autre chose qui ne va pas avec mon programme?


1 commentaires

Mike et Erick font de bonnes suggestions dans ce cas. Bien que votre code soit légal Java, il ne ressemble à Java. Cela ressemble plus à Pascal ou à une autre langue impérative, écrite à l'aide de la syntaxe Java. (Ce qui sera bien sûr compilé et courir, mais n'utilisera pas beaucoup d'outils que vous avez devant vous).


4 Réponses :


4
votes

Je pense qu'un peu de changements structurels aidera beaucoup et plus facilement pour vous. Définir de nouvelles classes: question code> et réponse code>. Laissez question code> avoir les options et réponse code> à l'intérieur de celui-ci. C'est la composition d'objet.

regarde dans le collection API . Avec une collection de questions, vous pouvez utiliser la méthode de shuffle pour les randomiser dans une seule ligne. Laissez Java faire le travail pour vous. P>

Vous pourriez avoir: p>

Collection<Question> questions = new ArrayList<Question>();

questions.add(...);
questions.add(...);
questions.add(...);

questions.shuffle();


1 commentaires

Bonne réponse, surtout en donnant le raisonnement de fond derrière elle.



1
votes

Créez une classe pour contenir une question et lire le fichier dans un tableau de ces objets. strong>

briser le problème en trois étapes. La première étape consiste à lire dans le fichier de données et à stocker toutes les données des objets. La deuxième étape consiste à randomiser l'ordre de ces objets. La dernière étape consiste à les imprimer. P> xxx pré>

randomise le tableau comme ceci: p> xxx pré>

alors vient de boucler Questions et leur sortie. P>

public class Question {
  private String question;
  private String option1;
  private String option2;
  private String option3;
  private String option4;
  private String answer;

  public Question(String question, String option1, String option2, String option3,
                  String option4, String answer) {
    this.question = question;
    this.option1 = option1;
    this.option2 = option2;
    this.option3 = option3;
    this.option4 = option4;
    this.answer = answer;
  }

  public void write() {
    System.out.println(this.question);
    System.out.println(this.option1);
    System.out.println(this.option2);
    System.out.println(this.option3);
    System.out.println(this.option4);
    System.out.println("Answer: "+this.answer);
  }
}


0 commentaires

2
votes

D'autres personnes (Mike, Erick) ont déjà suggéré de meilleures approches de ce problème en créant une nouvelle catégorie question code>, ajoutant des questions à une collection et en utilisant la méthode shuffle code> Pour les randiriser.

En ce qui concerne pourquoi vous êtes "Obtenir une null" dans votre code: Pour autant que je sache dans votre code exemple, vous ne lisez que deux questions à partir du fichier: p>

int ran = random(1,25);


0 commentaires

2
votes

Vous utilisez toutes sortes de numéros magiques , numéros de votre code Cela n'a pas beaucoup de sens. XXX PRE>

Ceux-ci devraient être le même numéro, non? Si nous avons 25 questions, nous devrions avoir de la place pour 25, lire 25 et utiliser 25. P>

Comment résoudre ce problème: H2>

1 Faites une constante H3>
public static List<String> q=new List<String>();

for(ar=0;ar<q.size();ar++){

int ran= random(1,q.size());


1 commentaires

Est-ce la bonne façon d'assigner? q [Ran] = Br.Readline (); Parce que je n'ai pas de question aléatoire. J'ai suivi les options 1 et 2 de votre réponse.