Hilfestellung zu Hochschulaufgaben

joki97

Mitglied
Hi zusammen,

leider komme ich aktuell überhaupt nicht weiter, was meine Aufgabe für die Hochschule angeht. Abgegeben werden muss diese bis Freitag 8:00 Uhr.
Ich hänge hier mal alle Dateien an, die aktuell benötigt werden und natürlich auch die Aufgabenstellung.
Laut Aufgabenstellung soll ich ein Würfelspiel erstellen, welches eine History anlegt. Leider komme ich hier nicht weiter, da einmal in dem Digramm angegeben wird, dass einmal ein Array des Objektes Dice(Die Würfelklasse) erstellt werden soll und einmal ein Int-Array mit der Größe 100.

Java:
package dayday;

public class Player extends Dice {
    int wuerfe = 0;
    int score = 0;
    Dice [] wuerfel = new Dice[100];
     public Player (int n) {
        wuerfe = 0;
        this.wuerfe = n;
    }
    
    void play() {
        for (int i = 0; i<wuerfe;i++) {
            wuerfel[i] = new Dice(1,6);
        }
        score = calcScore(super.history);
    }
    
    int calcScore(int [] wuerfe) {
        for (int i = 0; i<wuerfe.length;i++) {
            score += wuerfe[i];
        }
        return score;
    }
    
    int getScore() {
        return super.getAugen();
    }
    
    int getResults() {
        int erg = 0;
        for (int i = 0; i<wuerfe; i++) {
            erg+= super.history[i];
        }
        return erg;
    }
    void setHistory(int zahl) {
        for (int i = 0; i<wuerfe; i++) {
            super.history[i] = zahl;
        }
    }
    void printHistory() {
        for (int i = 0; i<wuerfel.length; i++) {
            if (super.history[i] != 0) {
                System.out.println(i+ ": " +wuerfel[i]);
            }
            
        }
        
    }
 }
Java:
package dayday;

public class Dice {
    private int augen = 0;
    private int max = 0;
    private int min = 0;
    int [] history = new int[100];
    int wuerfe = 0;

    public Dice() {
        this.augen = 6;
    }

    public Dice(int min, int max) {
        this.min = min;
        this.max = max;
        this.augen = 6;
    }

    int getAugen() {
        return augen;
    }

    void setWuerfel(int min, int max) {
        if (min >= 1 && max <= 6) {
            this.min = min;
            this.max = max;
        } else {
            System.out.println("Sorry, aber das ist kein Würfel.");
        }

    }
    int wuerfeln() {
        augen = (int) (Math.random() * max) + min;
        return augen;
    }
}

Ich verstehe nicht, wie ich die Gewürfelten Zahlen an das Array übergeben soll.
Sollte etwas unverständlich geschrieben sein, dann bitte einfach darauf hinweisen, ich werde es dann versuchen genauer zu erklären.

Ansonsten vorab schon einmal danke für die Hilfe.
 

Anhänge

  • Unbenannt.png
    Unbenannt.png
    47,8 KB · Aufrufe: 32

joki97

Mitglied
Was genau verstehst Du denn nicht? Wie man einem Element im Array einen Wert zuweist?
Java:
int[] x = new int[100];
x[0] = 1; // erstes Element von x auf 1 setzen
Nene, das habe ich verstanden. Wenn ich nun eine Ausgabe habe, bekomme ich: packagename.Klasse@28a418fc - Ich weiß, dass dies der belegte Speicherplatz oder so ähnlich ist und auch, dass dies mit .toString() zu beheben sein soll. Leider verstehe ich nicht, wo ich das einsetzen soll.
 

mihe7

Top Contributor
Dazu musst Du in der Klasse packagename.Klasse die toString-Methode überschreiben:
Java:
@Override
public String toString() {
    return "a nice presentation of ...";
}
 

joki97

Mitglied
Dazu musst Du in der Klasse packagename.Klasse die toString-Methode überschreiben:
Java:
@Override
public String toString() {
    return "a nice presentation of ...";
}
Hab das Problem schon behoben, danke :)

Zeig mal die Klasse "DiceGame"!
Java:
package dayday;

public class DiceGame extends Player{

    public DiceGame(int n) {
        super(n);
    }

    public static void main(String[] args) {
        Player p1 = new Player(super.getWuerfel()); // Hier fehlt der Parameter, da ich nicht weiß wie ich diesen aus der Dice Klasse auslesen kann
        p1.play();
        //Player p2 = new Player(3);
        //p2.play();
    }

}
Irgendwas stimmt einfach immer noch nicht.< Er fragt mich 3x wie oft ich wuerfeln will, obwohl ich nur 1x diese ganze Abfrage habe.
 
K

kneitzel

Gast
Also irgendwie ist die Klassenhirarchie oder eben die vergebenen Namen falsch:

Ein DiceGame ist ein Player?
Also ein Spiel kann mehrere Spieler haben, aber ein Spiel ist selten ein Spieler. Das klingt so nicht korrekt.
 

joki97

Mitglied
Also irgendwie ist die Klassenhirarchie oder eben die vergebenen Namen falsch:

Ein DiceGame ist ein Player?
Also ein Spiel kann mehrere Spieler haben, aber ein Spiel ist selten ein Spieler. Das klingt so nicht korrekt.
DiceGame ist die Klasse, welche Player ausführt also sie erstellt das "Spiel" sozusagen. Dice ist der Würfel und dessen Funktionen.
Siehe:
Code:
Erstellen Sie zum Testen und zur Ausführung von Würfelspielen die ausführbare Klasse
DiceGame.java. Legen Sie darin mindestens 2 Spieler an und fragen Sie durch eine Benutzereingabe
ab, wie viele Runden gespielt werden soll.

Ich verstehe was du meinst, komme aber nicht auf den Fehler muss ich gestehen. Könntest du mir freundlicherweise auf die Sprünge helfen?
 

joki97

Mitglied
Gibt es jemanden der mir etwas detaillierter erklären kann, wie ich die History für den Spieler implementiere? Derzeit hänge ich daran und komme nicht weiter. Desweiteren interessiert mich, wie die Methode calcScore() funktionieren soll..

Bisher habe ich probiert, bei jedem Würfeln den Wert direkt in der History zu speichern, aber das funktioniert nicht, da ich nicht weiß wie oft gewürfelt werden soll.
Auch zwei meiner Kommilitonen wären sehr dankbar :)
 

mihe7

Top Contributor
Bisher habe ich probiert, bei jedem Würfeln den Wert direkt in der History zu speichern, aber das funktioniert nicht, da ich nicht weiß wie oft gewürfelt werden soll.
Es ist doch völlig uninteressant, wie oft gewürfelt werden soll. Stell Dir einen Zettel vor, auf dem Du jeden Wurf notierst, nachdem Du gewürfelt hast. Auf dem Zettel ist Platz für 100 Würfe.
 

joki97

Mitglied
Es ist doch völlig uninteressant, wie oft gewürfelt werden soll. Stell Dir einen Zettel vor, auf dem Du jeden Wurf notierst, nachdem Du gewürfelt hast. Auf dem Zettel ist Platz für 100 Würfe.
Wie kann ich dann die richtige Stelle wählen an dem der Wurf gespeichert wird? Das ist mir bis jetzt nicht klar.. Danke dir trotzdem schon mal.
 

joki97

Mitglied
Wo trägst Du denn den Wurf auf dem Zettel ein?
Naja, dort wo eben Platz ist, aber ich muss ja dem Array mitteilen, an welcher stelle es speichern soll.

Wenn noch gar nicht gewürfelt wurde, dann wird der Wurf an der ersten Stelle des Arrays gespeichert. Dann musst du dir halt merken an welcher Stelle du zum letzten Mal gespeichert hast.
Alles klar, werde ich versuchen, danke.
 
Zuletzt bearbeitet:

mihe7

Top Contributor
Naja, dort wo eben Platz ist, aber ich muss ja dem Array mitteilen, an welcher stelle es speichern soll.
Nicht irgendwo, wo grade Platz ist, sondern an der nächsten freien Stelle. Die nächste Stelle bekommst Du, wenn Du mitzählst, wie viele Würfe Du schon hast (s. Antwort von @temi). Wenn Du keine eigenen Instanzvariablen verwenden darfst, musst Du die nächste freie Stelle suchen. Das ist kein Problem, weil der Würfel nicht jeden x-beliebigen Wert würfeln kann....
 

joki97

Mitglied
Okey, das habe ich soweit verstanden. Aber trotzdem stimmt es vorne und hinten nicht.. Ich verzweifle langsam wirklich, so schwer kann das eigentlich gar nicht sein. Ist es normal, dass ich ohne Vererbung nicht auf eine andere Klasse im selben Package zugreifen kann? Ich dachte das würde auch ohne Vererbung gehen....
 

AndiE

Top Contributor
Code:
class DiceGame{

main(){
lege player1 als Instanz von Player an;
lege player2 als Instanz von Player an;
Frage nach anzahl der Runden runden;
für Anzahl der runden{
player1.wuerfelt();
player2.wuerfelt();
}
Wessen Score größer ist, der hat gewonnen;
}

class Player{

lege Anzahl der Würfel an
lege einen Würfel kubus an
wuefelt(){ //wir von DiceGame aufgerufen
für alle Würfel{
kubus.spiele und berechne die gesamte Augenzahl
}
Erhöhe mit der gesamten augenzahl den Score
}

classe Würfel{
lege Würfelnachweis an

spiele(){
berechne augen und speichere sie im Würfelnachweis
}
}

Das ist mit Absicht Pseudocode, sollte aber klar machen, wie es gehen sollte.
 

mihe7

Top Contributor
Ist es normal, dass ich ohne Vererbung nicht auf eine andere Klasse im selben Package zugreifen kann? Ich dachte das würde auch ohne Vererbung gehen....
Was heißt "auf Klasse zugreifen"? Wenn Du meinst, dass Du nicht auf Instanzvariablen eines Objekts einer anderen Klasse zugreifen kannst, dann ist das durchaus möglich. Normalerweise gestaltet man Objekte nach dem Prinzip: greife nicht in anderer Leute Tasche.
 

Ähnliche Java Themen

Neue Themen


Oben