Hilfe bei Übungsaufgabe von Freitagsrunde

benzo8691

Mitglied
Hey Leute,
da ich das letzte Mal schon so schnell Hilfe hier bekommen habe, versuche ich es jetzt einfach nochmal erneut.
Ich habe folgende Übungsaufgabe bearbeitet:
https://wiki.freitagsrunde.org/Javakurs/Übungsaufgaben/Rennschnecke
Hier soweit mein Code:
Java:
import java.util.ArrayList;

class Schnecke{
        //Attribute
        String schneckename;
        String schneckerasse;
        double geschwindigkeit;
        double wegbisher;
        //Konstruktoren
        Schnecke(String name, String rasse, double speed){
            schneckename = name;
            schneckerasse = rasse;
            geschwindigkeit = speed;
            wegbisher = 0;
        }
        //Methoden
        double krieche(){                                                //Lässt Schnecke kriechen
            wegbisher = Math.random()*geschwindigkeit;
            return wegbisher;
        }
        String getName(){
            return schneckename;
        }
        String getRasse(){
            return schneckerasse;
        }
        double getGeschw(){
            return geschwindigkeit;
        }
        double getStrecke(){
            return wegbisher;
        }
       
        String alleDaten(){
            String geschwindigkeitStr = Double.toString(geschwindigkeit);            //Gibt Daten der Schnecke aus
            String wegbisherStr = Double.toString(wegbisher);
            String allesSchnecke = schneckename+" " +schneckerasse+" "
                    +geschwindigkeitStr+" "+wegbisherStr;
            return allesSchnecke;
        }
    }
class Rennen{
    //Attribute
    String rennenName;
    ArrayList<Schnecke> teilnehmer = new ArrayList<Schnecke>();               
    double kriechWeg;
   
    //Konstruktoren
    Rennen(String name,double anzahl, double weg){
        rennenName = name;
        kriechWeg = weg;
    }
    //Methoden
    void addSchnecke(Schnecke neueSchnecke){                                    //Fügt Schnecke hinzu
        teilnehmer.add(neueSchnecke);
    }
    public void alleRenndaten(){                                                //Gibt alle Renndaten aus
        String weg = Double.toString(kriechWeg);                               
        StringBuilder sb = new StringBuilder();
        sb.append("Name: "+rennenName+"\tTeilnehmer: "+teilnehmer.size()+
                    "\tStrecke: "+weg+"\nRennschnecken:\n");
        StringBuilder sbSchnecken = new StringBuilder();
        for (Schnecke snail : teilnehmer){
            System.out.println(sbSchnecken.append(snail.getName()+"\t\tRasse: "+snail.getRasse()+
                    "\tSpeed: "+snail.getGeschw()+"\tStrecke: "+snail.getStrecke()+"\n"));               
        }
    }
    public Schnecke ermittleGewinner(){                                            //Ermittelt Gewinner
        Schnecke sieger = null;
        for (Schnecke snail : teilnehmer){
            if(snail.getStrecke() > kriechWeg){
                    if(sieger == null){
                        sieger = snail;
                    }else{
                        if(snail.getStrecke() > sieger.getStrecke()){
                            sieger = snail;
                        }
                    }
            }
        }
        return sieger;
    }
    public void lasseSchneckenKriechen(){                                        //Lässt alle Schnecken kriechen
        for (Schnecke snail : teilnehmer){
            snail.krieche();
        }
    }
    public void starteRennen(){                                                    //Lässt Schnecken kriechen, bis eine im Ziel ist.
        while (ermittleGewinner() == null){
            lasseSchneckenKriechen();
        }
    }
}

public class Schneckenrennen {
   
    public static void main(String[] args) {
       
        //Schnecken erstellen
        Schnecke gustaf = new Schnecke("Gustaf", "Yolo", 10);                   
        Schnecke peter = new Schnecke("Peter", "SGE", 7);
        Schnecke katha = new Schnecke("Katha", "NomNom", 2);
       
        //Rennen erstellen
        Rennen kassel = new Rennen("Kasseler Schneckenrennen", 3, 20);
       
        //Schnecken dem Rennen hinzufügen
        kassel.addSchnecke(gustaf);
        kassel.addSchnecke(peter);
        kassel.addSchnecke(katha);
        //Alle Renndaten ausgeben
        kassel.alleRenndaten();
        //Starte Rennen
        kassel.starteRennen();
        //Alle Renndaten nach Durchführung des Rennens
        kassel.alleRenndaten();
       
    }

}

Soweit hat alles funktioniert. Jedoch habe ich an dieser Stelle erwartet alle Renndaten ausgegeben zu bekommen mit der jeweiligen Renndistanz der Schnecken. Ich habe mir auch zusätzlich die Musterlösung auf der Seite angeguckt, aber kann meinen Fehler nicht finden. Es ist soweit auch noch nicht komplett geordnet und brauch noch ein paar Feinheiten. Ich hoffe, ihr blickt durch.
Desweiteren würde ich mich freuen, wenn ihr mir vielleicht ein kurzes Feedback zu meinem Schreibstil geben könntet🙂
LG Ben
 
So, ich habe das Programm nun erweitert mit einem entsprechendem kleinen "Wettbuero" über welches "Wetten" angenommen werden können. Hier noch einmal der Code:
Java:
import java.util.ArrayList;

class Schnecke{
        //Attribute
        String schneckename;
        String schneckerasse;
        double geschwindigkeit;
        double wegbisher;
        //Konstruktoren
        Schnecke(String name, String rasse, double speed){
            schneckename = name;
            schneckerasse = rasse;
            geschwindigkeit = speed;
            wegbisher = 0;
        }
        //Methoden
        double krieche(){                                                //Lässt Schnecke kriechen
            wegbisher += Math.random()*geschwindigkeit;
            return wegbisher;
        }
        String getName(){
            return schneckename;
        }
        String getRasse(){
            return schneckerasse;
        }
        double getGeschw(){
            return geschwindigkeit;
        }
        double getStrecke(){
            return wegbisher;
        }
       
        String alleDaten(){
            String geschwindigkeitStr = Double.toString(geschwindigkeit);            //Gibt Daten der Schnecke aus
            String wegbisherStr = Double.toString(wegbisher);
            String allesSchnecke = schneckename+" " +schneckerasse+" "
                    +geschwindigkeitStr+" "+wegbisherStr;
            return allesSchnecke;
        }
    }
class Rennen{
    //Attribute
    String rennenName;
    ArrayList<Schnecke> teilnehmer = new ArrayList<Schnecke>();               
    double kriechWeg;
   
    //Konstruktoren
    Rennen(String name,double anzahl, double weg){
        rennenName = name;
        kriechWeg = weg;
    }
    //Methoden
    void addSchnecke(Schnecke neueSchnecke){                                    //Fügt Schnecke hinzu
        teilnehmer.add(neueSchnecke);
    }
    public void alleRenndaten(){                                                //Gibt alle Renndaten aus
        String weg = Double.toString(kriechWeg);                               
        StringBuilder sb = new StringBuilder();
        System.out.println(sb.append("Name: "+rennenName+"\tTeilnehmer: "+teilnehmer.size()+
                    "\tStrecke: "+weg+"\n\nRennschnecken:\n"));
        for (Schnecke snail : teilnehmer){
            StringBuilder sbSchnecken = new StringBuilder();
            System.out.println(sbSchnecken.append(snail.getName()+"\t\tTeam: "+snail.getRasse()+
                    "\tSpeed: "+snail.getGeschw()+"\tStrecke: "+snail.getStrecke()+"\n"));               
        }
    }
    public Schnecke ermittleGewinner(){                                            //Ermittelt Gewinner
        Schnecke sieger = null;
        for (Schnecke snail : teilnehmer){
            if(snail.getStrecke() > kriechWeg){
            sieger = snail;
            }
        }
        return sieger;
    }
    public void lasseSchneckenKriechen(){                                        //Lässt alle Schnecken kriechen
        for (Schnecke snail : teilnehmer){
            snail.krieche();
        }
    }
    public void starteRennen(){                                                    //Lässt Schnecken kriechen, bis eine im Ziel ist.
        while (ermittleGewinner() == null){
            lasseSchneckenKriechen();
        }
    }
}

class Wette{
    //Attribute
    static Schnecke schneckenName;
    static double wetteinsatz;
    static String spielername;
    //Konstruktor
    Wette(Schnecke name, double einsatz, String spieler){
        schneckenName = name;
        wetteinsatz = einsatz;
        spielername = spieler;
    }
    //Methoden
    Schnecke getSchnecke(){
        return schneckenName;
    }
    double getEinsatz(){
        return wetteinsatz;
    }
    StringBuilder getSpieler(){
        StringBuilder name = new StringBuilder();
        return name.append(spielername);
    }
}

class Wettbuero{
    //Attribute
    static Rennen schneckenRennen;
    static ArrayList<Wette> wettListe = new ArrayList<Wette>();
    static double wettFaktor;
   
    //Konstruktor
    Wettbuero(Rennen name, double faktor){
        schneckenRennen = name;
        wettFaktor = faktor;
    }
    //Methoden
    void wetteAnnehmen(Wette neueWette){                                        //Wette annehmen
        wettListe.add(neueWette);
    }
    void wetteErgebnis(){                                                        //Wurde Wette gewonnen?
        for(Wette bet : wettListe){
            if (bet.getSchnecke().equals(schneckenRennen.ermittleGewinner())){
                StringBuilder wette = new StringBuilder();
                wette = wette.append(bet.getSpieler());
                wette = wette.append(" hat die Wette gewonnen und erhält: ");
                wette = wette.append(bet.getEinsatz()*wettFaktor);
                wette = wette.append(" Euro.");
                System.out.println(wette);
            } else {
                StringBuilder wette = new StringBuilder();
                wette = wette.append(bet.getSpieler());
                wette = wette.append(" hat die Wette verloren. ");
                System.out.println(wette);
            }
           
        };
    }
   
}

public class Schneckenrennen {
   
    public static void main(String[] args) {
       
        //Schnecken erstellen
        Schnecke gustaf = new Schnecke("Gustaf", "Yolo", 4);                   
        Schnecke peter = new Schnecke("Peter", "SGE", 7);
        Schnecke katha = new Schnecke("Katha", "NomNom", 10);
       
        //Rennen erstellen
        Rennen kassel = new Rennen("Kasseler Schneckenrennen", 3, 20);
       
        //Wettbuero erstellen
        Wettbuero tipico = new Wettbuero(kassel, 3);
       
        //Wetten abgeben und annehmen
        Wette ben = new Wette(katha, 5, "Ben");
        Wette andi = new Wette(gustaf, 5, "Andi");
        tipico.wetteAnnehmen(ben);
        tipico.wetteAnnehmen(andi);
       
        //Schnecken dem Rennen hinzufügen
        kassel.addSchnecke(gustaf);
        kassel.addSchnecke(peter);
        kassel.addSchnecke(katha);
       
        //Alle Renndaten ausgeben
        kassel.alleRenndaten();
        //Starte Rennen
        kassel.starteRennen();
        //Alle Renndaten nach Durchführung des Rennens
        kassel.alleRenndaten();
        //Gewinner des Rennens
        System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"
                + "Der Gewinner des Rennens ist "+kassel.ermittleGewinner().getName()+"! Whoop whoop!\n");
        //Wette gewonnen?
        tipico.wetteErgebnis();
    }

}
Das Programm funktioniert auch, jedoch scheint es Probleme mit der for-Schleife der "wetteErgebnis"-Methode zu geben. Ich bekomme dabei immer das Ergebnis von ein und der gleichen Wette ausgegeben, verstehe aber nicht, warum er nicht nacheinander die ArrayList durchgeht. Könnt ihr mir weiterhelfen?
LG Ben
 
Ok, dankeschön. Ja das weiß ich. Hatte aber diesbzgl. vorher eine Fehlermeldung bekommen, die besagte, dass es nur mit statischen Variablen funktioniert. Habe dann allerdings die Methode wieder geändert und jetzt funktioniert es natürlich auch so...
 

Zurück
Oben