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 p>
option A P>
Option B P>
Option C P>
option d p>
réponse p> BlockQuote>
Je n'ai aucune difficulté à le lire de cette façon: p>
xxx pré> Le code ci-dessus est prévisible. La boucle juste incréments. Et il affiche les questions basées sur la commande. P>
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: p>
xxx pré> et c'est la méthode que j'utilise pour randomiser: p>
xxx pré> 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? P>
Pouvez-vous voir autre chose qui ne va pas avec mon programme? P> P>
4 Réponses :
Je pense qu'un peu de changements structurels aidera beaucoup et plus facilement pour vous. Définir de nouvelles classes: 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> 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.
Collection<Question> questions = new ArrayList<Question>();
questions.add(...);
questions.add(...);
questions.add(...);
questions.shuffle();
Bonne réponse, surtout en donnant le raisonnement de fond derrière elle.
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> randomise le tableau comme ceci: p> 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);
}
}
D'autres personnes (Mike, Erick) ont déjà suggéré de meilleures approches de ce problème en créant une nouvelle catégorie 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> question code>, ajoutant des questions à une collection et en utilisant la méthode
shuffle code> Pour les randiriser.
int ran = random(1,25);
Vous utilisez toutes sortes de numéros magiques , numéros de votre code Cela n'a pas beaucoup de sens. 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());
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.
Mike et Erick font de bonnes suggestions dans ce cas. Bien que votre code soit légal Java, il ne ressemble à i> 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).