2017-01-02 6 views
2

Erstellen eines Quiz für ein Schulprojekt, und es würde den Code viel einfacher machen, wenn es eine Möglichkeit gäbe, eine Frage und 4 mögliche Antworten in einem Element eines Arrays zu haben, mit der Frage und den 4 möglichen Antworten eigene Linie.Gibt es eine Möglichkeit, mehrere Zeilen Text in einem Array-Element für Java zu haben?

+0

Fragen Sie, wie man eine mehrzeilige Zeichenfolge erstellt? – Mureinik

+0

Im Grunde ja, das wird alles innerhalb eines singulären Array-Elements sitzen –

+4

Sie scheinen die Tatsache vollständig zu vermissen, dass Java eine OO-Sprache ist. Erstellen Sie kein Array mit Zeichenfolgen, bei denen jede Zeichenfolge analysiert werden muss, um die Frage von ihren Antworten zu trennen. Erstellen Sie ein Array von Question-Objekten, in denen ein Question-Objekt beispielsweise eine Feldfrage oder einen String und ein Feld possibleAnswers vom Typ String [] enthalten würde. –

Antwort

0

Sie könnten einfach ein Zeilentrennzeichen in Ihre Zeichenfolge einfügen. Um sicherzustellen, dass das Programm funktioniert gut auf jeder Plattform, sollten Sie die %n Formatierer verwenden und printf Ihre string:

String[] questions = new String[] { 
    // Question #1 with its answers 
    "What is your name?%n" + 
    "%n"     + 
    "1. Stack%n"   + 
    "2. Overflow%n"  + 
    "3. John%n"   + 
    "4. Doe%n" 

    // More questions here.. 
}; 

for (String question : questions) { 
    System.out.printf(question); 
} 
+1

@hardillb '% n' ist ein plattformneutraler Formatierer für' printf', der durch die korrekten Newline-Zeichen ersetzt wird. – Mureinik

+0

bist du sicher, dass du '+' benutzen musst? Ich denke, es muss "," anstelle von "+" sein ... –

+0

@Mohsen_Fatemi Dies ist ** ein Element des Arrays **, aufgeteilt in mehrere Zeichenketten zum leichteren Lesen. Sie sollten ',' zwischen ** verschiedenen ** Elementen des Arrays verwenden. – Mureinik

0

Grundsätzlich alles, was Sie tun müssen, ist eine Trennung Zeichen in der Zeichenfolge hinzufügen und bewerten sie auf die Anzeige der Frage.

String question = "Question\0First Answer\0Second Answer\n with Linebreak\0Third Answer"; 

Um separate Nutzung split():

String[] questionAndAnswers = question.split("\0"); 

Aber das ist nicht, wie das funktionieren soll. Sie sollten ein Objekt Question erstellen, das Eigenschaften für Fragen und mögliche Antworten enthält. Erstellen Sie dann ein Array von Question Objekten anstelle von String.

public class Question { 
    private String question; 
    private String[] answers; 
    private int correct; 

    // have getters and setters here 
} 
1

Wenn Sie eine String[] (ein Array von String Objekten) erzeugen dann jedes Element innerhalb dieser Anordnung jede gültige Java enthalten kann String, die einen String Neue-Zeile-Zeichen enthält \n enthält. So könnte man jedes Array-Element zu einem mehrzeiligen String machen, jede Zeile getrennt durch das \n Zeichen, so dass die Frage vor dem ersten \n steht, die richtige Antwort vor dem zweiten \n gefunden wird, und die falschen Antworten gefunden werden nachfolgende "Zeilen".

Allerdings würde ich sagen, dass dies macht den Code kryptischer und damit schwer zu folgen. Ein besserer objektorientierter Ansatz besteht darin, eine neue Klasse zu erstellen, die eine Quizfrage und ihre Antworten darstellt. Der Umriss dieser Klasse könnte wie folgt aussehen:

class QuizQuestion { 
    String questionText; 
    String correctAnswer; 
    List<String> incorrectAnswers; 
} 

Sie diese Klasse genau so verlassen konnte, und einfach auf seine Klassenfelder (aus dem gleichen Code-Paket) beziehen und damit einen neuen Objekttyp zu schaffen, die bündelt den Fragetext und die Antworten zusammen. Oder, falls erforderlich, könnten Sie dieser Klasse Methoden hinzufügen, um die Art und Weise zu kontrollieren/zu schützen, wie auf die Klassenfelddaten zugegriffen wird.

Jetzt statt mit Ihrem Original String[] arbeiten könnten Sie mit einem List<QuizQuestion> oder einem QuizQuestion[] arbeiten. Dies sollte den Code leichter lesbar machen und in Zukunft leichter zu verbessern sein.

1

Obwohl alle obigen Antworten gültige Implementierungen für Ihre Frage sind, würde ich eher mit einem objektorientierten Ansatz gehen, wie JB Nizet in den obigen Kommentaren feststellte. Hier ist ein Beispielprogramm, das ein Quiz implementiert und eine objektorientierte Implementierung zeigt. Bitte kopieren Sie es nicht 1: 1 als Lösung für Ihre Hausaufgaben. Es sollte vielmehr mit einigen Beispielen von dem, was Sie mit Java oder einer anderen objektorientierten Sprache tun können ...

import java.util.ArrayList; 
import java.util.List; 
import java.util.Scanner; 

/** 
* Quiz is a "wrapper class" for your whole project. 
* It contains a set of questions and some helper methods 
* to create the questions and proper answers. 
*/ 
public class Quiz { 

    /** 
    * We use a list to store our questions. 
    * Each question is an object of type "Question" 
    */ 
    List<Question> questions = new ArrayList<>(); 

    /** 
    * The entry point for our program. 
    * Java will run this method, if our code is "started". 
    * 
    * All it does is 
    * 
    * 1. Create a new quiz 
    * 2. Start the quiz with the 'play' method 
    */ 
    public static void main(String[] args) { 
     Quiz quiz = Quiz.create(); 
     quiz.play(); 
    } 

    /** 
    * Helper method to create a quiz. 
    * You can add as many questions as you like with as many answers 
    * as you like. 
    * The second parameter indicates the index of the answer 
    * that is the expected answer (starting with 1, not with 0). 
    */ 
    public static Quiz create() { 
     Quiz quiz = new Quiz(); 
     quiz.addQuestion(
       "What is the heaviest animal on earth?", 
       3, 
       "Elephant", 
       "Cow", 
       "Whale", 
       "Crocodile" 
     ); 
     quiz.addQuestion(
       "What is the biggest planet in the solar system?", 
       2, 
       "Mars", 
       "Jupiter", 
       "Earth", 
       "Saturn" 
     ); 
     return quiz; 
    } 

    /** 
    * Helper method that actually starts our quiz. 
    * 
    * There is a lot of room for improvement here - I just wanted 
    * to give you a brief example 
    * of how you can use the code here to play the quiz. Feel free to change :) 
    */ 
    public void play() { 
     for (Question q : questions) { 
      System.out.println(q.getQuestion()); 
      int i = 1; 
      for (Answer a : q.getAnswers()) { 
       System.out.println(i++ + ". " + a.getAnswer()); 
      } 
      System.out.printf("Please tell me the correct answer: "); 
      Scanner in = new Scanner(System.in); 
      String givenAnswer = in.next(); 
      if (q.getExpectedAnswer() == Integer.parseInt(givenAnswer)) { 
       System.out.printf("Brilliant - your answer was correct!"); 
      } else { 
       System.out.println("Ooops - that was wrong. The expected answer was: " + q.getProperAnswer()); 
      } 
     } 
    } 

    /** 
    * Helper method that adds a question to the quiz. 
    * 
    * First parameter is the question itself. 
    * Second parameter is the index of the correct answer 
    * in the answers given in the third parameter. 
    * Mind that the index starts with 1 not with 0 as arrays do in Java. 
    * Third parameter is a variable length parameter: 
    * this enables you to add as many answers as you want. 
    */ 
    private void addQuestion(String questionText, int expectedAnswer, String... answers) { 
     Question question = new Question(questionText); 
     for (String answerText : answers) { 
      question.addAnswer(new Answer(answerText)); 
     } 
     question.setExpectedAnswer(expectedAnswer); 
     this.questions.add(question); 
    } 

    /** 
    * Class that implements a question. 
    * 
    * A question consists of the text for the question itself, 
    * the index of the expected answer (starting with 1!) and 
    * an ordered list of answers. 
    */ 
    public class Question { 

     private String question; 

     private int expectedAnswer; 

     private List<Answer> answers = new ArrayList<>(); 

     public Question(String question) { 
      this.question = question; 
     } 

     public void addAnswer(Answer answer) { 
      answers.add(answer); 
     } 

     public void setExpectedAnswer(int expectedAnswer) { 
      this.expectedAnswer = expectedAnswer; 
     } 

     public int getExpectedAnswer() { 
      return expectedAnswer; 
     } 

     public String getQuestion() { 
      return question; 
     } 

     public List<Answer> getAnswers() { 
      return answers; 
     } 

     public String getProperAnswer() { 
      return answers.get(expectedAnswer - 1).getAnswer(); 
     } 
    } 

    /** 
    * The answer itself is again a class. 
    * 
    * This is a little over-engineered, it might as well be a string. 
    * Implementing it as a separate class enables you to add further 
    * information - e.g. a scoring for the wrong/right answer... 
    */ 
    private class Answer { 

     private String answer; 

     public Answer(String answer) { 
      this.answer = answer; 
     } 

     public String getAnswer() { 
      return answer; 
     } 

    } 

} 

Wenn Sie Fragen bezüglich der Umsetzung können Sie mich in den Kommentaren zu fragen. Glückliche Kodierung!

Verwandte Themen