B
Berserkz
Gast
Hey Ihr!
Meine Aufgabe war es ein Programm zu schreiben, welches ein Ratespiel simuliert bei dem der benutzer 10 Versuche hat um die richtige, vom Programm erstelle Zufallszahl, zu erraten. Für jeden dieser 10 möglichen Fälle(Versuch bei dem die Zahl erraten wurde) soll auch ein bestimmer Text ausgegeben werden.
Mein Problem ist jetzt noch, dass es möglichst nicht prozedural ist, sondern objektorientiert. Ich habe verschiedene Klassen die ich zum Schluss auch poste, manche von denen (wie MeineAusgabe und MeineEingabe) dienen auch nur zur Ausgabe oder Eingabe von Text bzw. Zahlen.
Woran ich gerade knabber ist, dass ich eine Mainklasse habe in der ich zum einen die "Überschrift" ausgebe. Auserdem folgt in der Mainklasse(RateSpielMain) ein Aufruf einer Methode einer anderen Klasse(RateSpiel).
Ich könnte aber auch in den Konstruktor der Klasse(RateSpiel) vergrößern um die dortigen Attribute ALLE zu initialisieren? Und die Berechnung und Ausgabe der Versuchs-Meldung (das ist die Methode um die es sich handelt) dort festzuhalten. Aber wenn ich alles in den Konstruktor packe, dann würde es ja prozedural werden und das will ich überhaupt nicht! Dafür ist Java ja nicht erschaffen worden
Das Problem ist nur, wenn ich diese Methode in der RateSpielMain aufrufe, dass sie dann ja public sein muss. Und irgendwie hab ich da gar kein gutes Gefühl. Das ist doch eigentlich unsicher oder?
Vielleicht könntet Ihr mir behilflich sein und sagen, welche Methode ich anwenden soll. Bzw vielleicht sogar eine noch bessere habt, die ich aber auch verstehe...bin wie gesagt noch nicht so fit :###
Ich poste nur die Variante, wo ich die Methode public habe und über die MainKlasse aufrufe!
Auserdem lasse ich die Klassen MeinRandom, MeineEingabe und MeineAusgabe weg, da sonst der post zu lang wird denke ich!
Mein Random realisiert nur die Zufallszahl die ich über die Methode erzeugeZufallsZahlen() in der RateSpiel-Klasse aufrufe und erzeuge!
MeineEingabe realisiert die Eingabe von Text oder Zahlen!
MeineAusgabe realisiert die Ausgabe von Text auf dem Bildschirm!
RateSpielMain:
RateSpiel:
So, ich hoffe es ist alles gut gegangen. Ich wäre sehr glücklich wenn Ihr mir helfen könnt und mir ein paar Tips zur Verbesserung des Codes und/oder des objektorientierten Programmierens gebt!
Mfg
Meine Aufgabe war es ein Programm zu schreiben, welches ein Ratespiel simuliert bei dem der benutzer 10 Versuche hat um die richtige, vom Programm erstelle Zufallszahl, zu erraten. Für jeden dieser 10 möglichen Fälle(Versuch bei dem die Zahl erraten wurde) soll auch ein bestimmer Text ausgegeben werden.
Mein Problem ist jetzt noch, dass es möglichst nicht prozedural ist, sondern objektorientiert. Ich habe verschiedene Klassen die ich zum Schluss auch poste, manche von denen (wie MeineAusgabe und MeineEingabe) dienen auch nur zur Ausgabe oder Eingabe von Text bzw. Zahlen.
Woran ich gerade knabber ist, dass ich eine Mainklasse habe in der ich zum einen die "Überschrift" ausgebe. Auserdem folgt in der Mainklasse(RateSpielMain) ein Aufruf einer Methode einer anderen Klasse(RateSpiel).
Ich könnte aber auch in den Konstruktor der Klasse(RateSpiel) vergrößern um die dortigen Attribute ALLE zu initialisieren? Und die Berechnung und Ausgabe der Versuchs-Meldung (das ist die Methode um die es sich handelt) dort festzuhalten. Aber wenn ich alles in den Konstruktor packe, dann würde es ja prozedural werden und das will ich überhaupt nicht! Dafür ist Java ja nicht erschaffen worden
Das Problem ist nur, wenn ich diese Methode in der RateSpielMain aufrufe, dass sie dann ja public sein muss. Und irgendwie hab ich da gar kein gutes Gefühl. Das ist doch eigentlich unsicher oder?
Vielleicht könntet Ihr mir behilflich sein und sagen, welche Methode ich anwenden soll. Bzw vielleicht sogar eine noch bessere habt, die ich aber auch verstehe...bin wie gesagt noch nicht so fit :###
Ich poste nur die Variante, wo ich die Methode public habe und über die MainKlasse aufrufe!
Auserdem lasse ich die Klassen MeinRandom, MeineEingabe und MeineAusgabe weg, da sonst der post zu lang wird denke ich!
Mein Random realisiert nur die Zufallszahl die ich über die Methode erzeugeZufallsZahlen() in der RateSpiel-Klasse aufrufe und erzeuge!
MeineEingabe realisiert die Eingabe von Text oder Zahlen!
MeineAusgabe realisiert die Ausgabe von Text auf dem Bildschirm!
RateSpielMain:
Code:
import java.io.IOException;
public class RateSpielMain
{
public static void main(String[] args) throws IOException
{
MeineAusgabe.schreibe("!!!Willkommen beim Ratespiel!!!\n\n");
MeineAusgabe.schreibe("Ich denke mir eine Zahl zwischen 1 und 1000. Raten Sie meine Zahl!\n");
MeineAusgabe.schreibe("Los gehts!!!\n");
RateSpiel ratemal = new RateSpiel();
//Hier wird die Methode aus der RateSpiel Klasse aufgerufen
ratemal.schreibeRateSpiel();
}
}
RateSpiel:
Code:
import java.io.IOException;
public class RateSpiel
{
// Die Attribute. Welche Davon muss ich fuer das objektorientierte Programmieren im Konstruktor initialisieren?
private int zufallsZahl = 0;
private int rateZahl = 0;
private int rateVersuche = 0;
// Mein Konstruktor. Initialisiert hier nur die Zufallszahl
public RateSpiel() throws IOException
{
erzeugeZufallsZahl();
}
// Die Zufallszahl die mit Hilfe von MeinRandom erzeugt wird
private void erzeugeZufallsZahl() throws IOException
{
MeinRandom zufallsZahlX = new MeinRandom();
zufallsZahl = zufallsZahlX.nextInt(1,1000);
}
// Das ist die Methode die mir Kopfzerbrechen bereitet. Public oder Private(grossgeschrieben wegen dem Code)? Ueber den Konstruktor aufrufen oder nicht? Habe ich das mit den Rateversuchen akzeptabel gelöst? Oder benötige ich dafuer evtl sogar eine andere Methode?(Doofe Frage sorry, aber ich versuche meinen Programmierstil zu verbessern)
public void schreibeRateSpiel() throws IOException
{
while (rateZahl != zufallsZahl && rateVersuche <= 10)
{
rateVersuche++;
rateZahl = MeineEingabe.erfasseInt();
if (rateZahl < zufallsZahl)
{
MeineAusgabe.schreibe("Meine gedachte Zahl ist groesser!\n");
}
if (rateZahl > zufallsZahl)
{
MeineAusgabe.schreibe("Meine gedachte Zahl ist kleiner!\n");
}
if (rateZahl == zufallsZahl && rateVersuche == 1)
{
MeineAusgabe.schreibe("Unglaublich, Sie haben meine Zahl beim ersten Mal erraten!");
}
if (rateZahl == zufallsZahl && rateVersuche == 2)
{
MeineAusgabe.schreibe("Fantastisch, Sie konnten meine Zahl beim zweiten Mal erraten!");
}
if (rateZahl == zufallsZahl && rateVersuche == 3)
{
MeineAusgabe.schreibe("Wunderbar, Sie haben meine Zahl beim dritten Mal erraten!");
}
if (rateZahl == zufallsZahl && rateVersuche == 4)
{
MeineAusgabe.schreibe("Toll, beim vierten Mal erraten!");
}
if (rateZahl == zufallsZahl && rateVersuche == 5)
{
MeineAusgabe.schreibe("Nicht übel, beim fünften Mal erraten. Das Glas ist halb voll, oder halb leer nicht wahr? Hehe.");
}
if (rateZahl == zufallsZahl && rateVersuche == 6)
{
MeineAusgabe.schreibe("Gar nicht mal so schlecht, beim sechsten Mal erraten.");
}
if (rateZahl == zufallsZahl && rateVersuche == 7)
{
MeineAusgabe.schreibe("Hat doch noch geklappt! Mehr Mut beim Raten!");
}
if (rateZahl == zufallsZahl && rateVersuche == 8)
{
MeineAusgabe.schreibe("Na da stand schon der Schweiß auf der Stirn? Trotzdem, nicht schlecht!");
}
if (rateZahl == zufallsZahl && rateVersuche == 9)
{
MeineAusgabe.schreibe("Ist ja noch mal gut gegangen! Keine Panik Sie haben es geschafft, last but not least!");
}
if (rateZahl == zufallsZahl && rateVersuche == 10)
{
MeineAusgabe.schreibe("Schade! Das waren mehr als 10 Versuche.\nDie von mir gedachte Zahl war" + " " + zufallsZahl + "\nWie waer es, versuchen Sie es erneut?");
}
}
}
}
So, ich hoffe es ist alles gut gegangen. Ich wäre sehr glücklich wenn Ihr mir helfen könnt und mir ein paar Tips zur Verbesserung des Codes und/oder des objektorientierten Programmierens gebt!
Mfg