Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Beispiele aus Übungen und Praktika
#18
Hier die Listings aus dem Praktikum vom 30.04.2009:

Die Klasse Antwort:
Code:
package de.tudresden.praktikum2009.lib;

/* Diese Klasse stellt das Modell für eine einzelne Antwort. Sie enthält
* den Text und den Wahrheitsgehalt. Beide Werte sollen nach Erstellen
* eines Objektes nur noch ausgelesen werden können.*/

public class Antwort {

    private String antworttext;

    private boolean richtig;

    // Konstruktor, für Initialisierung der Daten
    public Antwort(String antworttext, boolean richtigeAntwort) {
        this.antworttext = antworttext;
        this.richtig = richtigeAntwort;
    }

    public String getAntworttext() {
        return antworttext;
    }

    /*
     * abweichend hier:bei boolschen Werten fängt der Standard-Getter mit is
     * statt mit get an
     */
    public boolean isRichtig() {
        return richtig;
    }

    /*
     * eine Version des Getters, welcher vor Rückgabe eine Modifizierung von
     * Daten, hier der Typ und Wert, vornimmt
     */
    public String getRichtig() {
        if (this.richtig) {
            return "wahr";
        } else {
            return "falsch";
        }
    }
}

Die Klasse Frage:
Code:
package de.tudresden.praktikum2009.lib;

import java.util.ArrayList;

/* Eine Frage soll eindeutig identifizierbar sein,
* den Frage-Text beinhalten und kann mehrere
* Antwortmöglichkeiten haben. Und auch hier sollten
* die Attribute eines Objektes nur ausgelesen werden
* können*/
public class Frage {
    private String id;

    private String frage;

    /* ArrayList -> siehe Collection-Framework */
    private ArrayList<Antwort> antworten;

    public Frage(String identifikator, String frage,
            ArrayList<Antwort> antworten) {
        id = identifikator;
        this.frage = frage;
        this.antworten = antworten;
    }

    public String getId() {
        return id;
    }

    public String getFrage() {
        return frage;
    }

    public ArrayList<Antwort> getAntworten() {
        return antworten;
    }
}

Die Klasse Fragenkatalog
Code:
package de.tudresden.praktikum2009.lib;

import java.util.ArrayList;

/* Der Fragenkatalog enthält eine Menge von Fragen und hat
* auch eine Bezeichnung */
public class Fragenkatalog {
    private ArrayList<Frage> fragen;

    private String name;

    
    /* es ist möglich, gleichnamige Konstruktoren (und
     * auch Methoden) mit voneinander verschiedenen
     * Signaturen zu definieren */
    public Fragenkatalog(String name) {
        this.name = name;
        this.fragen = new ArrayList<Frage>();
    }

    public Fragenkatalog(String name,
            ArrayList<Frage> existierendeFragen) {
        this.name = name;
        this.fragen = existierendeFragen;
    }

    /* fügt eine neue(?) Frage dem Katalog hinzu*/
    public void addFrage(Frage frage) {
        this.fragen.add(frage);
    }

    /* entfernt eine Frage mit entsprechender id aus
     * dem Katalog*/
    public boolean delFrage(String id) {
        for (int i = 0; i < this.fragen.size(); i++) {
            if (this.fragen.get(i).getId().equals(id)) {
                this.fragen.remove(i);
                return true;
            }
        }
        return false;
    }

    public ArrayList<Frage> getFragen() {
        return fragen;
    }

    public void setFragen(ArrayList<Frage> fragen) {
        this.fragen = fragen;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

und nun ein paar Tests:

Test der Klasse Antwort
Code:
package de.tudresden.praktikum2009;

import java.util.ArrayList;
import de.tudresden.praktikum2009.lib.Antwort;

public class TestAntwort {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // 5 Objekte vom Typ Antwort erstellt
        Antwort aw1 = new Antwort("ein grüner Kreis.", true);
        Antwort aw2 = new Antwort("ein grünes Dreieck.", false);
        Antwort aw3 = new Antwort("ein grüne Figur.", true);
        Antwort aw4 = new Antwort("ein grünes Pfeil.", true);
        Antwort aw5 = new Antwort("ein blauer Kreis.", false);

        // die Objekte zu einer Liste zusammenführen
        ArrayList<Antwort> antwortmoeglichkeiten = new ArrayList<Antwort>();
        antwortmoeglichkeiten.add(aw1);
        antwortmoeglichkeiten.add(aw2);
        antwortmoeglichkeiten.add(aw3);
        antwortmoeglichkeiten.add(aw4);
        antwortmoeglichkeiten.add(aw5);

        //ein einzelnes Antwort-Objekt auslesen
        System.out.println(aw3.getAntworttext());
        System.out.println("Diese Antwort ist " + aw3.isRichtig() + ".");

        // udn jetzt mit einem zufälligen Antwort-Objekt
        int n = (int) (Math.random() * antwortmoeglichkeiten.size());
        System.out.println("Zufallszahl: " + n);
        System.out.println("jetzt ein zufälliges Antwortobjekt aus der Liste:");
        System.out.println(antwortmoeglichkeiten.get(n).getAntworttext());
        System.out.println("Diese Antwort ist "
                + antwortmoeglichkeiten.get(n).isRichtig() + ".");
    }

}

test der Klasse Frage
Code:
package de.tudresden.praktikum2009;

import java.util.ArrayList;

import de.tudresden.praktikum2009.lib.Antwort;
import de.tudresden.praktikum2009.lib.Frage;

public class TestFrage {

    // eine kleine Testumgebung
    public static void main(String[] args) {
        
        Antwort aw1 = new Antwort("ein grüner Kreis.", true);
        Antwort aw2 = new Antwort("ein grünes Dreieck.", false);
        Antwort aw3 = new Antwort("ein grüne Figur.", true);
        Antwort aw4 = new Antwort("ein grünes Pfeil.", true);
        Antwort aw5 = new Antwort("ein blauer Kreis.", false);

        ArrayList<Antwort> antwortmoeglichkeiten = new ArrayList<Antwort>();
        antwortmoeglichkeiten.add(aw1);
        antwortmoeglichkeiten.add(aw2);
        antwortmoeglichkeiten.add(aw3);
        antwortmoeglichkeiten.add(aw4);
        antwortmoeglichkeiten.add(aw5);
        
        //wir erzeugen uns 3 Objekte vom Typ "Frage"
        Frage f1 = new Frage("A001", // eine (eindeutige) ID
                "Was sind gängige Ampelsignale für das fahren/gehen?", // die Frage
                antwortmoeglichkeiten); // die Antwortmöglichkeiten
        Frage f2 = new Frage("A002",
                "blablabla...", antwortmoeglichkeiten);
        Frage f3 = new Frage("65003",
                "blubb", antwortmoeglichkeiten);
        

        System.out.println(f1.getId());
        System.out.println(f1.getFrage());
        System.out.println(f1.getAntworten());
        
        System.out.println(f3.getId());
        System.out.println(f3.getFrage());
        System.out.println(f3.getAntworten());
    }
}

und nun ein ganz kleines Quiz mit 2 Fragen:
Code:
package de.tudresden.praktikum2009;

import java.util.ArrayList;
import java.util.Scanner;
import de.tudresden.praktikum2009.lib.*;


// hier für 1 richtige Antwortmöglichkeit
public class Quizshow {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        // Code wurde in eine Methode ausgelagert
        Fragenkatalog fk = initFK();

        // jetzt wird eine Frage aus allen möglichen ausgewählt
        int n = (int) (Math.random() * fk.getFragen().size());

        // Frage und Antwortmöglichkeiten auf Konsole ausgeben
        System.out.println("Beantworte bitte folgende Frage:");
        System.out.println(fk.getFragen().get(n).getFrage());

        /*
         * besser als direkte Ausgabe der einzelnen Antworten, da man die anzahl
         * der möglichen Antworten als unbekannt voraussetzen sollte
         */
        for (int i = 0; i < fk.getFragen().get(n).getAntworten().size(); i++) {
            System.out.println((i + 1)
                    + " - "
                    + fk.getFragen().get(n).getAntworten().get(i)
                            .getAntworttext());
        }

        // nutzer darf sich entscheiden
        int wahl = sc.nextInt();

        /*
         * Gültigkeit der Auswahl abprüfen (Schutz vor zu große/zu kleine
         * Zahlen)
         */
        if ((wahl) > 0 && wahl <= fk.getFragen().get(n).getAntworten().size()) {
            System.out.println("diese Antwort ist "
                    + fk.getFragen().get(n).getAntworten().get(wahl - 1)
                            .getRichtig());
        } else {
            System.out
                    .println("deine Auswahl lag ausserhalb der Antwortmöglichkeit");
        }

    }

    // erstellt einen Fragekatalog und füttert ihn mit 2 Fragen
    private static Fragenkatalog initFK() {

        Fragenkatalog fk = new Fragenkatalog("lustigerName");

        ArrayList<Antwort> antworten = new ArrayList<Antwort>();

        Antwort a1 = new Antwort("5", false);
        antworten.add(a1);

        antworten.add(new Antwort("7", true));
        antworten.add(new Antwort("8", false));

        Frage frage = new Frage("A", "Wieviel Tage hat eine Woche?", antworten);

        fk.addFrage(frage);

        /*
         * Neu-Initialisierung des Objektes -> es sind ab hier wieder 0 Elemente
         * enthalten ("Variablen-Recycling")
         */
        antworten = new ArrayList<Antwort>();
        antworten.add(new Antwort("H2O", true));
        antworten.add(new Antwort("H2O2", false));
        antworten.add(new Antwort("HO2", false));

        frage = new Frage("B", "Was ist die chemische Formel von Wasser",
                antworten);

        fk.addFrage(frage);

        return fk;
    }
}


Ihr könnt euch ja über folgende Sachen mal Gedanken machen:
  1. wie kann man in der Klasse Fragenkatalog absichern, dass in einem Fragenkatalog-Objekt jede id nur einmal vorkommt (id = Primärschlüssel)?
  2. wie sieht der Sourcecode für ein Quiz aus, in dem pro Frage mehrere richtige Antworten möglich sind?
  3. welche persistente Datenquellen wären als Quelle zum Füllen des Fragenkataloges denkbar?

Viel Spass,

Matthias
Füllhöhe des Textes technisch bedingt!

----------------------------------------
Matthias Zagermann
Jünger der polyphonen PVC/PVAc-Scheiben

Zitat:Jede Entscheidung ist der Tod von Milliarden von Möglichkeiten
Zitieren


Nachrichten in diesem Thema
Beispiele aus Übungen und Praktika - von tiefenbass - 01.05.2009, 01:11

Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Praktika Werkstofftechnik SS12 Bombenrichter 7 7.499 17.07.2021, 13:06
Letzter Beitrag: Hedy
  Nicht bearbeitete Praktika = 5, oder nicht zur Prüfung zugelassen? sJSin 2 1.409 24.06.2016, 12:28
Letzter Beitrag: sJSin
  Notendurchschnitt aus den Praktika wilk 9 4.030 09.07.2008, 21:16
Letzter Beitrag: AudiFred
  Frage zur Prüfungszulassung => Praktika Beechjete 14 5.197 23.05.2007, 17:32
Letzter Beitrag: tigerente
  Infos zu den Praktika ChrisW 0 13.259 24.05.2005, 11:45
Letzter Beitrag: ChrisW

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste