Objektorientiere Programmierung

Kopki

Mitglied
Hallo,
ich muss eine Umfrageerstellung in Java Programmieren. Wir sollen dies Objektorientiert machen. Man soll am Anfang die Anzahl der Fragen festlegen können, und dann die fragen nacheinander eingeben.

Ich weißt aber nicht wie ich Objekte Dynamisch erstellen kann.
Ich hab es erst in einem String ausprobiert mit einer Variablen in der String Größe Ist dies der richtige Ansatz? Und ist dies weitestgehend Objektorientiert?

Ist alles neu für mich mit dem Objektorientierten Programmieren
 

VfL_Freak

Top Contributor
Moin,
Ich hab es erst in einem String ausprobiert mit einer Variablen in der String Größe Ist dies der richtige Ansatz?
Ich verstehe nicht mal annähernd, was Du damit sagen willst ... :confused:

Ich weißt aber nicht wie ich Objekte Dynamisch erstellen kann.
Suchst Du sowas??
Java:
public MyObject newObject;
Oder was ist mit "dynamisch erstellen" gemeint ??

VG Klaus
 

Kopki

Mitglied
Nicht String sonder Array natürlich. Ich kann dir ja die Aufgabenstellung mal zeigen:

In dieser Aufgabe sollen Sie Umfragen simulieren. Zum Hintergrund der Simulation: Eine Umfrage besteht aus mehreren Fragen. Bei den Fragen soll es sich ausschließlich um Fragen handeln, die mit Ja oder Nein beantwortet werden können. An einer Umfrage können beliebig viele Personen teilnehmen. Sie bekommen die Fragen gestellt und müssen mit Ja oder Nein antworten. Die Simulation soll folgendermaßen ablaufen:

Zunächst werden die einzelnen Fragen eingegeben. 
Anschließend wird die Umfrage durchgeführt, d.h. mehreren Umfrageteilnehmern werden die einzelnen Fragen gestellt, die diese beantworten müssen.
Abschließend werden die Umfrageergebnisse auf den Bildschirm ausgegeben. Konkret wird für jede Frage die absolute und prozentuale Anzahl an Ja- und Nein-Antworten ausgegeben.

Aufgabe: Führen Sie eine objektorientierte Entwicklung eines entsprechenden Java-Programms durch. Überlegen Sie zunächst: Was für Objekte bzw. Klassen lassen sich identifizieren, welche Beziehungen existieren zwischen den Objekten, was für Eigenschaften und Funktionen besitzen die Objekte. Implementieren Sie anschließend die Klassen sowie die eigentliche Simulation. Auf die Objekt-Variablen soll nur über get-/set-Methoden zugegriffen werden.

Die einzige frage die ich habe ist wie ich die anzahl der Fragen dynamisch anpassen kann. Wenn ich bei der Anzahl der Fragen 3 schreibe soll der mir ja 3 Fragen erstellen.
 

Kopki

Mitglied
public class Umfrage {
public static void main (String[] args) {

System.out.print("Bitte Titel der Umfrage eingeben: "); String Titel = IO.readString();
System.out.print("Bitte die Anzahl der Fragen eingeben: "); int Anzahl = IO.readInt();

while (Anzahl >= 0) {
Fragen frage1 = new Fragen();
}
 

SchwarzWeiß

Bekanntes Mitglied
1. Code bitte in Code-Tags (in der Symbolleiste auf Einfügen -> Code -> Java)
2. Variablennamen kleinschreiben
3. Wie du schon selbst sagtest, ich würde ein Array, welches die Fragen speichert, erzeugen mit der Länge der eingelesenen Anzahl und die Fragen dann in einer Schleife hinzufügen.
 

Javinner

Top Contributor
So wie SchwarzWeiß es empfohlen hat.
Nur als Beispiel könnte es so aussehen..
Java:
Willkommen zu unserem kleinen Quiz!
Wieviele Fragen möchten Sie eingeben?
6
Nun können Sie 6 Fragen eingeben
Wann wird es endlich wieder Sommer?
Wer wird Millionär?
2x2=5?
Muss ich Grundlagen lernen, um das hier zu können?
Wer oder was ist Katzenberger?
Wann kommt endlich die Fortsetzung von Avatar?

print(fragen);

Wann wird es endlich wieder Sommer?
Wer wird Million�r?
2x2=5?
Muss ich Grundlagen lernen, um das hier zu k�nnen?
Wer oder was ist Katzenberger?
Wann kommt endlich die Fortsetzung von Avatar?
 

truesoul

Top Contributor
Hmmm.

Warum nach der Anzahl der Fragen fragen?
Man kann ein Array auch vergrößern?

Nach jeder geschriebene Frage wird ein Objekt von Typ Frage erstellt und dann das array um 1 vergrößert und dann auf die letzte Position hinzugefügt. Da sollte man natürlich das array mit den zuvor abgelegten Fragen kopieren.

Grüße
 

Kopki

Mitglied
So jetzt habe ich einen Code fabriziert. Aber das ist doch alles imperativ programmiert oder? Vor allem hab ich weder eine get oder set Methode benutzt...

Code:
public class Umfrage {
   
    public static void main (String[] args) {
       
        System.out.print("Bitte Titel der Umfrage eingeben: "); String Titel = IO.readString();
        System.out.print("Bitte die Anzahl der Fragen eingeben: "); int Anzahl = IO.readInt();
       
        String[] Fragen = new String [Anzahl];
        String[] Antworten = new String [Anzahl];
       
        //Erstelle Fragen (Array)
        for (int i = 0; i < Anzahl; i++) {
            System.out.println("Bitte geben sie die Frage " + (i+1) + ". ein"); Fragen[i]=IO.readString();
        }
        System.out.println(java.util.Arrays.toString(Fragen));
       
        System.out.println("Die heutige Umfrage lautet:" + Titel);
       
        //Erstelle Antworten (Array)
       
        for (int i = 0; i < Anzahl; i++) {
           
            System.out.println(Fragen[i]);
            Antworten[i]=IO.readString();
            if (Antworten[i] == "j") {
                System.out.println("Okey nächste frage...");
            }else if (Antworten[i] == "n") {
                System.out.println("Okey nächste frage...");
            }else System.out.println("Bitte geben Sie j oder n ein");
            i--;
       
        }   
    }   
}
 

SchwarzWeiß

Bekanntes Mitglied
Wie gesagt, schreibe die Variablen wie titel und anzahl klein, so kann man den Code schneller lesen.
Mach doch die Frage als Klasse und speichere darin die Fragestellung als String-Attribut und die Antworten (die auch boolean sein können wenn es nur ja oder nein gibt).
 

Javinner

Top Contributor
if (Antworten == "j")
Vergleich mit equals..

for (int i = 0; i < Anzahl; i++)
a) wenn du schon solange, wie Anzahl Antworten suchen möchtest, dann benutze doch auch Array Fragen
b) i--; Unnötig, Var. i wird bereits behandelt
 

SchwarzWeiß

Bekanntes Mitglied
Warum nach der Anzahl der Fragen fragen?
Man kann ein Array auch vergrößern?
Nein kann man nicht, du vergrößerst es ja nicht, du erzeugst jedes mal ein neues. Macht man ja aber eigentlich nicht, auch aus Performanzgründen. Bei dynamischer Größe wird natürlich eine (Array)List verwendet, aber zu Übungszwecken ist die Eingabe denke ich der richtige Weg, da bestimmt nicht beigebracht werden soll, wie man statische Arrays "vergrößert".
 

truesoul

Top Contributor
Nein kann man nicht, du vergrößerst es ja nicht, du erzeugst jedes mal ein neues. Macht man ja aber eigentlich nicht, auch aus Performanzgründen. Bei dynamischer Größe wird natürlich eine (Array)List verwendet, aber zu Übungszwecken ist die Eingabe denke ich der richtige Weg, da bestimmt nicht beigebracht werden soll, wie man statische Arrays "vergrößert".

Ja ich weiß wie das Prinzip funktioniert, danke. Aus Performancegründen bei ein Dutzend fragen, da würde ich aber mal die ms messen, die da verloren gehen :)
Das nächste Mal achte ich darauf das ich "vergrößert" schreibe, damit klar ist was gemeint ist ;)

Im übrigen macht eine Arraylist auch nichts anderes als ein neues Array zu erzeugen und alle Daten zu kopieren.

Da sollte man natürlich das array mit den zuvor abgelegten Fragen kopieren.

Passt also wunderbar zu

Die einzige frage die ich habe ist wie ich die anzahl der Fragen dynamisch anpassen kann.

Grüße
 
Zuletzt bearbeitet:

SchwarzWeiß

Bekanntes Mitglied
Aus Performancegründen bei ein Dutzend fragen, da würde ich aber mal die ms messen, die da verloren gehen :)
Natürlich ist in diesem Beispiel die Performanz komplett egal wie bei nahezu allen Anfängeraufgaben (meine Tests ergaben, dass die ArrayList bei 100 000 Werten über 1000x schneller war als das primitive Array), aber ich denke wir sind uns einig, dass wir bei dynamischen Größen immer die Collections nehmen anstatt die statischen Arrays zu benutzen und einem Anfänger daher erst gar nicht beibringen sollten, wie man statische Arrays "vergrößert", oder? :)
 

truesoul

Top Contributor
Natürlich ist in diesem Beispiel die Performanz komplett egal wie bei nahezu allen Anfängeraufgaben (meine Tests ergaben, dass die ArrayList bei 100 000 Werten über 1000x schneller war als das primitive Array), aber ich denke wir sind uns einig, dass wir bei dynamischen Größen immer die Collections nehmen anstatt die statischen Arrays zu benutzen und einem Anfänger daher erst gar nicht beibringen sollten, wie man statische Arrays "vergrößert", oder? :)

Ja sicher würde ich persönlich auf Collections zugreifen. Wozu das Rad neu erfinden! Aber es schadet sicher nicht für ein Anfänger mal selber so eine "simple" Logik zu implementieren. :)
 

Neue Themen


Oben