Überprüfungsmethode

Ostkreuz

Aktives Mitglied
a) Schreiben Sie einen Konstruktor für die Klasse Kaperfahrt, der ein Ship als Parameter entgegennimmt.

b) Schreiben Sie eine Methode public boolean klarZumAuslaufen(). Die Methode gibt true zurück, wenn die Kaperfahrt ein Schiff zugewiesen bekommen hat, das Schiff einen Kapitän und einen Quartiermeister und mindestens 5 Piraten hat.

Hallo ich verstehe nicht ganz wie ich das jetzt überprüfen soll. Muss ich in der Methode ein neues Objekt Kaperfahrt erstellen und diesem ein Schiff zuweisen, welches ich dann überprüfen muss oder muss ich ein neues Objekt Kaperfahrt bereits als Parameter zur Methode hinzufügen?
 

LimDul

Top Contributor
Die Methode soll in der Klasse Kaperfahrt geschrieben werden und keine parameter haben. Sieht man schon an der Signatur der Methode.

Ein Objekt sollst du da nicht erstellen - die Informationen sollten alle in der Klasse verfügbar sein
 

wer112

Top Contributor
a) Schreiben Sie einen Konstruktor für die Klasse Kaperfahrt, der ein Ship als Parameter entgegennimmt.

b) Schreiben Sie eine Methode public boolean klarZumAuslaufen(). Die Methode gibt true zurück, wenn die Kaperfahrt ein Schiff zugewiesen bekommen hat, das Schiff einen Kapitän und einen Quartiermeister und mindestens 5 Piraten hat.

Hallo ich verstehe nicht ganz wie ich das jetzt überprüfen soll. Muss ich in der Methode ein neues Objekt Kaperfahrt erstellen und diesem ein Schiff zuweisen, welches ich dann überprüfen muss oder muss ich ein neues Objekt Kaperfahrt bereits als Parameter zur Methode hinzufügen?
Ich bin selber net gut in Programmieren und bin eher "Anfänger ca." aber ich habe da ne Idee.
Ich persöhnlich würde erstmal die Methode aufrufen und die Variablen übergeben.
Danach würde ich eine mehrfach verschachtelte If Abfrage starten.

Und das Ergebniss per return wieder an den Aufrufer zurück geben und dann mit dem Ergebniss weiter arbeiten.

das würde ich generell somachen. Mit Aufgabe a) würde ich es net wissen, (evtl. Strings Arrays und BaseAdapter...)


Aber hör lieber auf die anderen xD

Und jeder könnte mich berichtigen xD
 

mihe7

Top Contributor
Aber hör lieber auf die anderen xD
Es geht nicht um die anderen sondern um die Aufgabenstellung und die ist eindeutig:

a) Schreiben Sie einen Konstruktor für die Klasse Kaperfahrt, der ein Ship als Parameter entgegennimmt.

Da gibts es nichts zu rütteln: die Klasse Kaperfahrt soll einen Konstruktor bekommen, der ein Ship als Parameter erwartet. Heißt:
Java:
class Kaperfahrt {
    public Kaperfahrt(Ship someShip) { ... }
}
Ob der Konstruktor public sein soll oder nicht, ist im Text nicht angegeben.

Bei
b) Schreiben Sie eine Methode public boolean klarZumAuslaufen().
ist das nicht anders:
Java:
class Kaperfahrt {
    public Kaperfahrt(Ship someShip) { ... }
    public boolean klarZumAuslaufen() { ... }
}
Jetzt müssen noch geeignete Instanzvariablen hinzugefügt und die Code-Blöcke mit Inhalt gefüllt werden.

Wie man sieht, bekommt der Konstruktor ein Ship, klarZumAuslaufen aber nichts übergeben. Logischerweise muss klarZumAuslaufen aber auf das Ship zugreifen können, folglich muss es eine Instanzvariable für das Schiff geben:

Java:
class Kaperfahrt {
    private Ship ship;
    public Kaperfahrt(Ship someShip) { 
        ship = someShip;  
    }
    public boolean klarZumAuslaufen() { ... }
}

Damit ist a) gelöst und in klarZumAuslaufen kann nun ship verwendet werden, um b) zu lösen.
 

wer112

Top Contributor
Es geht nicht um die anderen sondern um die Aufgabenstellung und die ist eindeutig:
Ich meine, dass er nicht unbedingt auf mich hören muss, sondern auf die anderen Java Mitglieder, die besser sind als ich und gut programmieren können ;)
Da gibts es nichts zu rütteln: die Klasse Kaperfahrt soll einen Konstruktor bekommen, der ein Ship als Parameter erwartet. Heißt:
Java:
class Kaperfahrt {
    public Kaperfahrt(Ship someShip) { ... }
}
Ob der Konstruktor public sein soll oder nicht, ist im Text nicht angegeben.

Bei

ist das nicht anders:
Java:
class Kaperfahrt {
    public Kaperfahrt(Ship someShip) { ... }
    public boolean klarZumAuslaufen() { ... }
}
Jetzt müssen noch geeignete Instanzvariablen hinzugefügt und die Code-Blöcke mit Inhalt gefüllt werden.

Wie man sieht, bekommt der Konstruktor ein Ship, klarZumAuslaufen aber nichts übergeben. Logischerweise muss klarZumAuslaufen aber auf das Ship zugreifen können, folglich muss es eine Instanzvariable für das Schiff geben:

Java:
class Kaperfahrt {
    private Ship ship;
    public Kaperfahrt(Ship someShip) {
        ship = someShip;
    }
    public boolean klarZumAuslaufen() { ... }
}

Damit ist a) gelöst und in klarZumAuslaufen kann nun ship verwendet werden, um b) zu lösen.
Und wie kann dann geprüft werden, ob das Schiff auslaufen darf oder nicht, wenn keine Daten vorhanden sind, die man übergeben kann, zum ermitteln?
 

mihe7

Top Contributor
Und wie kann dann geprüft werden, ob das Schiff auslaufen darf oder nicht, wenn keine Daten vorhanden sind, die man übergeben kann, zum ermitteln?
Auch das steht in der Aufgabe:
Die Methode gibt true zurück, wenn die Kaperfahrt ein Schiff zugewiesen bekommen hat, das Schiff einen Kapitän und einen Quartiermeister und mindestens 5 Piraten hat.
Den ersten Teil kann man anhand der Beschreibung lösen (prüfe, ob ship == null gilt), für den Rest braucht man Informationen zur Klasse Ship aber grundsätzlich greift man eben über die Instanzvariable ship auf die Informationen des Schiffs zu.
 

Ostkreuz

Aktives Mitglied
Auch das steht in der Aufgabe:

Den ersten Teil kann man anhand der Beschreibung lösen (prüfe, ob ship == null gilt), für den Rest braucht man Informationen zur Klasse Ship aber grundsätzlich greift man eben über die Instanzvariable ship auf die Informationen des Schiffs zu.
Danke erstmal die crew ist ein Array wie kann ich dort nun abfragen, ob die ersten 5 Piraten vorhanden sind?
In der Klasse ship sieht das Array so aus:
Java:
    private Pirate[] crew = new Pirate[10];

und der Konstruktor der Klasse Pirat sieht so aus:
Code:
    public Pirate(String firstName, String lastName, int yearOfBirth) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.yearOfBirth = yearOfBirth;
 

Ostkreuz

Aktives Mitglied
Ob das ein Array ist, ist für die Klasse Kaperfahrt erstmal egal. Die Frage ist: welche Methoden bietet denn die Klasse Ship an?
Setter für alle Attribute und einmal
Code:
    public void addPirate(Pirate pirate) {
        for (int i = 0; i < this.crew.length; i++) {
            if (crew[i] == null) {
                crew[i] = pirate;
                break;
            }
        }
    }
und
Code:
    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;
 

Ostkreuz

Aktives Mitglied
Dann spendierst Du Ship noch eine Methode, die die Anzahl an Piraten zurückgibt. Dann kannst Du das abprüfen.
Java:
    public int countPirate() {
        int counter = 0;
            for (int i = 0; i < crew.length; i ++) {
                if (crew[i] != null)
                    counter ++; 
            }

          return counter; 
    }
Wenn das so richtig ist wie soll ich die denn jetzt einsetzen und durch if überprüfen?
 

Ostkreuz

Aktives Mitglied
Java:
    public boolean klarZumAuslaufen() {
        if (ship != null) {
        if (ship.getCaptain() != null && ship.getQuartermaster() != null) {
        if (ship.countPirate() >= 5) {
                
            }
            }
            
        }
        return true;
    }

Wenn ich es so versuche kommt bei der Kontrolle immer noch 0 Punkte
 

KonradN

Super-Moderator
Mitarbeiter
Bei sowas doch einfach immer genau vorstellen, wie man bei sowas vorgehen würde.

Du hast eine Checkliste und die willst Du durchgehen - dabei interessiert Dich nur, ob alle punkte erfüllt sind oder nicht.

Da geht man doch einfach die Liste durch. Wenn man einen Punkt findet, der nicht ok ist, dann weiss man: Die Checkliste ist nicht erfüllt.
Wenn man durch die Liste durch ist und hat kein Element gefunden, das nicht erfüllt gewesen wäre, dann weiss man: Die Checkliste ist erfüllt.

Daher das, was ich eigentlich immer wieder schreibe: Überlege es Dir in Worten. Stell Dir vor, die Objekte wären Lebewesen. Da kann man dann Fragen stellen:

  • Habe ich ich Schiff? -> Nein? -> nicht bereit zum auslaufen.
  • Hey Schiff! Hast Du ein Captain? -> Nein? nicht bereit zum auslaufen.
  • ...
  • Liste durch? -> Bereit zum auslaufen.

Also nicht erst versuchen, sich das abstrakt als Code vorzustellen. Das kann so gut funktionieren mit den Objekten. Und das hilft übrigens auch beim Design, denn es gibt Zuständigkeiten und all sowas ...


Edit: Bei einem Return hat er abgeschickt ... keine Ahnung, was ich da gedrückt habe ....
Edit2 : Command Enter schickt ab ... jetzt habe ich es noch einmal ausprobiert gehabt :)
 

Ostkreuz

Aktives Mitglied
Bei sowas doch einfach immer genau vorstellen, wie man bei sowas vorgehen würde.

Du hast eine Checkliste und die willst Du durchgehen - dabei interessiert Dich nur, ob alle punkte erfüllt sind oder nicht.

Da geht man doch einfach die Liste durch. Wenn man einen Punkt findet, der nicht ok ist, dann weiss man: Die Checkliste ist nicht erfüllt.
Wenn man durch die Liste durch ist und hat kein Element gefunden, das nicht erfüllt gewesen wäre, dann weiss man: Die Checkliste ist erfüllt.

Daher das, was ich eigentlich immer wieder schreibe: Überlege es Dir in Worten. Stell Dir vor, die Objekte wären Lebewesen. Da kann man dann Fragen stellen:

  • Habe ich ich Schiff? -> Nein? -> nicht bereit zum auslaufen.
  • Hey Schiff! Hast Du ein Captain? -> Nein? nicht bereit zum auslaufen.
  • ...
  • Liste durch? -> Bereit zum auslaufen.

Also nicht erst versuchen, sich das abstrakt als Code vorzustellen. Das kann so gut funktionieren mit den Objekten. Und das hilft übrigens auch beim Design, denn es gibt Zuständigkeiten und all sowas ...


Edit: Bei einem Return hat er abgeschickt ... keine Ahnung, was ich da gedrückt habe ....
Edit2 : Command Enter schickt ab ... jetzt habe ich es noch einmal ausprobiert gehabt
Aber wie überprüfe ich das den bei den ersten 5 Stellen eines Arrays?
 

temi

Top Contributor
Aber wie überprüfe ich das den bei den ersten 5 Stellen eines Arrays?
Für das Array mit der Mannschaft hast du doch oben schon eine Lösung. Was Konrad meinte ist die Punkte einzeln "abzuhaken".

Java:
    public boolean klarZumAuslaufen() {
  
        if (ship == null) { return false; } // kein Schiff, dann nicht auslaufen
       
        // weitere Punkte der Liste...
       
        return true; // alles erledigt
}

Diese Technik nennt man auch "early return", weil man die Methode vorzeitig beendet, in dem Fall, wenn eine wichtige Bedingung nicht erfüllt ist.
 

Neue Themen


Oben