Attribut von Objekt ändern

Ostkreuz

Aktives Mitglied
Wie kann ich dem Captain, dem Quartiermeister und dem Rest der Crew in einer neuen Klasse Dukaten hinzufügen?
Habe absolut keinen Ansatz dafür.
Das sind meine jetzigen Klassen.
Java:
public class Pirate {

    private String firstName;
    private String lastName;
    private int yearOfBirth;
    private String pet = null;
    private int ducats;

    public Pirate(String firstName, String lastName, int yearOfBirth) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.yearOfBirth = yearOfBirth;
    }

    public Pirate() {
    }

    public void setPet(String pet) {
        this.pet = pet;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public int getYearOfBirth() {
        return yearOfBirth;
    }

    public String getPet() {
        return pet;
    }

    public int getDucats() {
        return ducats;
    }

    public void addDucats(int amount) {
        this.ducats += amount;
    }

    public String print() {
        return "Pirat "  + firstName +  " " + lastName + ". (" + ducats + " Dukaten)";
    }
}

public class Ship {
    private String shipName;
    private int treasury;
    private Pirate captain;
    private Pirate quartermaster;
    private Pirate[] crew = new Pirate[10];

    public Ship(String shipName) {
        this.shipName = shipName;
    }

    public String getShipName() {
        return shipName;
    }

    public int getTreasury() {
        return treasury;
    }

    public void setTreasury(int treasury) {
        this.treasury = treasury;
    }

    public void addDucats(int amount){
        this.treasury += amount;
    };

    public Pirate getCaptain() {
        return captain;
    }

    public Pirate getQuartermaster() {
        return quartermaster;
    }

    public Pirate[] getCrew() {
        return crew;
    }

    public void setCaptain(Pirate captain) {
        this.captain = captain;
    }

    public void setQuartermaster(Pirate quartermaster) {
        this.quartermaster = quartermaster;
    }

    public void addPirate(Pirate pirate) {
        for (int i = 0; i < this.crew.length; i++) {
            if (crew[i] == null) {
                crew[i] = pirate;
                break;
            }
        }
    }

    public void deletePirate(String firstName, String lastName) {
        for (int i = 0; i < this.crew.length; i++) {
            Pirate pirate = crew[i];
            if (pirate.getFirstName().equals(firstName) && pirate.getLastName().equals(lastName)) {
                crew[i] = null;
                break;
            }
        }
    }
    public int countPirate() {
        int counter = 0;
            for (int i = 0; i < crew.length; i ++) {
                if (crew[i] != null)
                    counter ++;  
            }

        return counter;  
    }
}
 

Jw456

Top Contributor
Wo und wie erstellst denn einen neuern Priraten. Ich sehe nichts in deinen Code von new Pirat.


Dann rufe doch captain.addDucats(10); auf

Bei einem Piraten dann musst du denn halt in der Liste suchen und auf die gefundene Instanz auch die add Methode aufrufen.
 

Ostkreuz

Aktives Mitglied
Du hast doch in Pirate schon ducats. Was willst Du da noch hinzufügen?
Das ist die Aufgabe:
Schreiben Sie eine Methode public void simuliereSaison(), in der 10 Kaperfahrten durchgeführt werden. Am Ende jede Kaperfahrt wird die Beute der Schatzkammer des Schiffes hinzugefügt. Berechnen Sie anschließend den Beuteanteil für jeden Piraten und fügen Sie diesen dem Geldbeutel des Piraten mittels addDucats hinzu. Geben Sie anschließend jeden Piraten der Besatzung mit seinem jeweiligen Vermögen aus.
Java:
public class Kaperfahrt {
        public void simuliereSaison()  {
        for (int x=0; x < 10; x++) {
            beginneKaperfahrt();
            int beute = beginneKaperfahrt();
            int counter = ship.countPirate();
            int anteil = berechneAnteile(beute, counter);
        }   
        }
Ich verstehe nur nicht was ich jetzt schreiben muss um auf die Dukaten von dem captain und quartermeister zuzugreifen
 

Ostkreuz

Aktives Mitglied
Das ist die Aufgabe:
Schreiben Sie eine Methode public void simuliereSaison(), in der 10 Kaperfahrten durchgeführt werden. Am Ende jede Kaperfahrt wird die Beute der Schatzkammer des Schiffes hinzugefügt. Berechnen Sie anschließend den Beuteanteil für jeden Piraten und fügen Sie diesen dem Geldbeutel des Piraten mittels addDucats hinzu. Geben Sie anschließend jeden Piraten der Besatzung mit seinem jeweiligen Vermögen aus.
Java:
public class Kaperfahrt {
        public void simuliereSaison()  {
        for (int x=0; x < 10; x++) {
            beginneKaperfahrt();
            int beute = beginneKaperfahrt();
            int counter = ship.countPirate();
            int anteil = berechneAnteile(beute, counter);
        }  
        }
Ich verstehe nur nicht was ich jetzt schreiben muss um auf die Dukaten von dem captain und quartermeister zugreifen zu können und dort den anteil hinzuzufügen
 

Jw456

Top Contributor
Java:
// in der Klasse Ship
public void addDucatsProPirat(int ducats) {
        for (int i = 0; i < this.crew.length; i++) {
                Pirate pirate = crew[i];
                pirrate.addDucats(ducats);
                  
            }
        }
 

Ostkreuz

Aktives Mitglied
Java:
// in der Klasse Ship
public void addDucatsProPirat(int ducats) {
        for (int i = 0; i < this.crew.length; i++) {
                Pirate pirate = crew[i];
                pirrate.addDucats(ducats);
                 
            }
        }
Danke habe es jetzt so
Java:
    public void simuliereSaison()  {
        for (int x=0; x < 10; x++) {
            beginneKaperfahrt();
            int beute = beginneKaperfahrt();
            int counter = ship.countPirate();
            int anteil = berechneAnteile(beute, counter);
            double anteilquartermaster = berechneAnteile(beute, counter)*1.5;
            int anteilquartermaster1 = (int)anteilquartermaster;
            ship.getCaptain().addDucats(anteil*2);
            ship.getQuartermaster().addDucats(anteilquartermaster1);
            ship.addDucatsProPirat(anteil);
        }
    }
 

temi

Top Contributor
Du rufst die Methode beginneKaperfahrt() zweimal auf. Das hat an dieser Stelle keine negative Auswirkung, aber ist überflüssig.

Java:
        for (int x=0; x < 10; x++) {
            beginneKaperfahrt(); // hier rufst du die Methode auf und verwirfst das Ergebnis
            int beute = beginneKaperfahrt(); // hier nochmal und du speicherst das Ergebnis

Es gibt durchaus Fälle, wo es einen Fehler darstellen würde, z. B. der Aufruf einer (fiktiven) Methode getLineFromFile(). Damit würde nur jede zweite Zeile verarbeitet werden...
 

Neue Themen


Oben