Kleine Hilfe beim Schreiben eines Programmes benötigt :D

Lukas5203

Mitglied
Hallo!
Ich bin gerade dabei eine Aufgabe aus meinem Programmieren-Kurses zu erledigen. Hier ist die gestellte Aufgabe:

Erstellen Sie eine Klasse Tier, in welcher der Name, die Art und das Geschlecht eines Tieres abgespeichert werden können. Erstellen Sie neben dem Konstruktor und den normalen get-Methoden für Name, Art und Geschlecht eine Methode gibDatenAus, die die Daten eines Tieres übersichtlich auf dem Bildschirm ausgibt. Erstellen Sie außerdem eine Methode "paarungsfaehig", die überprüft, ob ein Tier von der gleichen Art und vom anderen Geschlecht ist. Erzeugen Sie im Hauptprogramm mehrere Tierobjekte und führen Sie die programmierten Methoden zur Überprüfung aus.

Ich habe mitlerweile das, was ich habe fehlerfrei bekommen, jedoch weiß ich nun nicht mehr weiter. Ich weiß nicht, wie ich die Daten auf dem Bildschirm ausgeben lasse und wie man das mit der Methode "paarungsfaehig" programmiert. Ich habe eine main Methode als "Hauptprogramm" erstellt, weiß jedoch nicht, was dort hinein soll.

Hier ist, was ich bis jetzt habe:

Java:
public class Tier{
  static String name;
  static String art;
  static char geschlecht;

  public static void main(String[] args) {
    //???????????????
    }

  public Tier(String pName, String pArt, char pGeschlecht){
   
    name = pName;
    art = pArt;
    geschlecht = pGeschlecht;
  }

  public String getName() {
    return name;
  }

  public String getArt() {
    return art;
  }

  public char getGeschlecht() {
    return geschlecht;
  }

  public static void gibDatenAus () {
    System.out.println("Das Tier hat den Namen " + name);
    System.out.println("Das Tier ist von der Art " + art);
    System.out.println("Das Tier ist vom Geschlecht " + geschlecht);
  }
}

Ich hoffe, dass einige von Euch die Zeit finden mir zu helfen. Vielen Dank schonmal im Vorraus für die aufgewandte Zeit!!!!
LG Lukas
 
Zuerst: Entferne das static vor den Attributen.
Dann: Erzeuge Tier-Objekte innerhalb der main-Methode, zum Beispiel: Tier t1 = new Tier("Sunny","Katze","W");
Dann kannst du mit t1.gibDatenAus(); bereits eine Ausgabe sehen.
Wie würde denn die Signatur von der Methode paarungsfaehig ausshen? Welcher Typ würde zurückgegeben werden?
 
Schoneinmal VIELEN DANK!!! Das Programm läuft nun soweit. Die paarungsfaehig Methode verwirrt mich immer noch. Es ist in der Aufgabenstellung nämlich kein Typ angegeben, der zurück gegeben werden soll. Ich werde darauf am Montag mal meinen Kursleiter ansprechen.

So funktioniert es übrigens ohne die Methode paarungsfaehig:

Java:
public class Tier{
  static String name;
  static String art;
  static char geschlecht;

  public static void main(String[] args) {
    Tier tier1 = new Tier("Dustin", "Loewe", 'm');
    Tier tier2 = new Tier("Paula", "Loewe", 'w');
    tier1.gibDatenAus();
    }

  public Tier(String pName, String pArt, char pGeschlecht){
   
    name = pName;
    art = pArt;
    geschlecht = pGeschlecht;
  }

  public String getName() {
    return name;
  }

  public String getArt() {
    return art;
  }

  public char getGeschlecht() {
    return geschlecht;
  }

  public static void gibDatenAus () {
    System.out.println("Das Tier hat den Namen " + name);
    System.out.println("Das Tier ist von der Art " + art);
    System.out.println("Das Tier ist vom Geschlecht " + geschlecht);
  }
}
 
Bitte beachte, dass, wie bereits in meiner ersten Antwort, die static wegmüssen.
static bedeutet, dass das Attribut nicht einem Objekt sondern der Klasse zugeordnet ist.
Das bedeutet, wenn du mehrere Tiere erstellst, wären alle Attribute so wie das zuletzt erstellte.
Du kannst ja paarungsfaehig mal als void-Methode implementieren und dort einfach mit Sysout-Ausgaben arbeiten, wenn du noch keine Wertrückgabe benutzen möchtest.
 
"paarungsfaehig" funktioniert leider immer noch nicht. Ich habe keine Idee, wie ich das Geschlecht, sowie die Art der beiden Tiere vergleichen kann.
Momentaner Stand ist wie folgt:

Java:
public class Tier{
  String name;
  String art;
  char geschlecht;

  public static void main(String[] args) {
    Tier tier1 = new Tier("Dustin", "Loewe", 'm');
    Tier tier2 = new Tier("Paula", "Loewe", 'w');
    tier1.gibDatenAus();
    tier2.gibDatenAus();
    }

  public Tier(String pName, String pArt, char pGeschlecht){
  
    name = pName;
    art = pArt;
    geschlecht = pGeschlecht;
  }

  public String getName() {
    return name;
  }

  public String getArt() {
    return art;
  }

  public char getGeschlecht() {
    return geschlecht;
  }

  public void gibDatenAus() {
    System.out.print("Das Tier hat den Namen " + name);
    System.out.println("Das Tier ist von der Art " + art);
    System.out.println("Das Tier ist vom Geschlecht " + geschlecht);
  }
  //public void paarungsfaehig() {
  //????
  //}
}
 
Fangen wir doch mit dem Rückgabetyp an. Was würdest du auf die Frage "Sind diese beiden Tiere paarungsfähig?" antworten?

Als nächstes kommt dann die Frage "Wann sind zwei Tiere paarungsfähig?"

Edit:

Ich sehe grad, die Antwort auf die zweite Frage steht ja schon da. Die Art und das Geschlecht müssen verglichen werden.

Die Methode "paarungfaehig()" gehört zu einem bestimmten Tier z.B. tier1.paarungsfähig(). Damit du vergleichen kannst, brauchst du noch ein zweites Tier. Wie könntest du einer Methode noch ein weiteres Tier übergeben?
 
Zuletzt bearbeitet:
Also zur 1.Frage würde ich antworten: “Die Tiere sind dann paarungsfähig, wenn sie von der gleichen Art und dem gleichen Geschlecht sind”. Wie ich einer Methode noch ein zweites Tier zuweisen kann, weiß ich leider nicht.
 
Also zur 1.Frage würde ich antworten: “Die Tiere sind dann paarungsfähig, wenn sie von der gleichen Art und dem gleichen Geschlecht sind”.
Wenn dich jemand fragt "Sind diese diese Katze und dieser Hund paarungsfähig?", würdest du dann auch so Antworten? 😉

Wie ich einer Methode noch ein zweites Tier zuweisen kann, weiß ich leider nicht.
Guck dir mal den Konstruktor der Klasse Tier an 😉
 
Boolean meine ich

Das meine ich auch.

Zur zweiten Frage hat dir @mrBrown auch schon einen Hinweis gegeben. Um der Methode einen Vergleichspartner zu übergeben benötigst du einen sogenannten Parameter. Wie so etwas aussieht, kannst du beim Konstruktor sehen. Dein Konstruktor hat zwei Parameter vom Typ String und einen Parameter vom Typ char. Du möchtest mit einem anderen Tier vergleichen, demnach wäre ein Parameter vom Typ Tier praktisch.

Versuch doch mal die komplette Methodensignatur mit Rückgabetyp zu schreiben.
 
Tut mir leid, aber jetzt komme ich nicht mehr durch. Ich füge einen boolean "Tier" dem Konstruktor hinzu? Diesen würde ich dann ja vorher mit boolean Tier; erstellen. Nun kann ich in dieser Variabel aber ja nicht für jedes Tier etwas abspeichern. Ob nun false oder true abgespeichert wird, hängt doch von der Kombination der Tiere ab, oder?
 
Tut mir leid, aber jetzt komme ich nicht mehr durch. Ich füge einen boolean "Tier" dem Konstruktor hinzu? Diesen würde ich dann ja vorher mit boolean Tier; erstellen. Nun kann ich in dieser Variabel aber ja nicht für jedes Tier etwas abspeichern. Ob nun false oder true abgespeichert wird, hängt doch von der Kombination der Tiere ab, oder?

Vergiss das alles!

Wir reden hier von einer Methodensignatur. Eine Methode hat einen Rückgabetypen (oder void) einen Namen und ggf. Parameter.

Schauen wir mal ein paar Methodensignaturen deiner Klasse an:

public char getGeschlecht() Rückgabetyp ist "char", Name ist "getGeschlecht" und es gibt keine Parameter.

public static void main(String[] args) Rückgabetyp "void", Name "main", Parameter "String[] args".

Noch kurz zum Parameter: Der Name des Parameters ist "args" und er ist vom Typ String-Array.

Die Methode "paarungsfähig()" kannst du jetzt sicher mit den bereits gegebenen Infos vervollständigen:

public ???? paarungsfaehig(????)
 
So wie ich es verstehe, müsste es dann public boolean paarungsfaehig(Tier) sein

Fast richtig. Du hast für den Parameter nur einen Typen angegeben. Es fehlt noch der Name, den du dir mehr oder weniger frei aussuchen kannst. Im Englischen wäre ein gängiger Vorschlag "other", übersetzt "anderesTier". Aber entscheide selbst.
 
Okay, nun schreibe ich es so: public boolean paarungsfaehig(Tier, other) oder so: public boolean paarungsfaehig(Tier(other)) ?

Das ist eine ganz normale Deklaration, so wie:

int zaehler oder String text

Erst kommt die Typangabe und danach der Name. Die Antwort auf deine Frage ist demnach: weder noch.

Edit: Ich finde Deutsch in Programmen etwas seltsam, aber eine Mischung daraus ist noch seltsamer.
 
Ich habe jetzt mal einiges im Programm verändert:

Code:
public class Tier{
  String name;
  String art;
  char geschlecht;
 
  public static void main(String[] args) {
    Tier tier1 = new Tier("Dustin", "Loewe", 'm');
    Tier tier2 = new Tier("Paula", "Loewe", 'w');
    tier1.gibDatenAus();
    tier2.gibDatenAus();
    tier1.paarungsfaehig(tier2);
    }
 
  public Tier(String pName, String pArt, char pGeschlecht){
    
    name = pName;
    art = pArt;
    geschlecht = pGeschlecht;
  }
 
  public String getName() {
    return name;
  }
 
  public String getArt() {
    return art;
  }
 
  public char getGeschlecht() {
    return geschlecht;
  }
 
  public void gibDatenAus() {
    System.out.print("Das Tier hat den Namen " + name + ". ");
    System.out.print("Das Tier ist von der Art " + art + " ");
    System.out.println("und hat das Geschlecht " + geschlecht);
  }
  public boolean paarungsfaehig(Tier other) {
    if (geschlecht == other.geschlecht){
      System.out.print("Die Tiere sind paarungsfaehig.");
    }else{
      System.out.print("Die Tiere sind nicht paarungsfaehig.");
    }
  }
}

Nun bekomme ich allerdings folgende Fehlermeldung:

Tier.java:44:3: error: missing return statement
}
^
1 error

Weißt Du dazu eine Lösung?
 
Okay, das Programm läuft nun ohne Fehler, jedoch steht nun in der cmd natürlich nicht, ob das Tier paarungsfähig ist, oder nicht.

Hier nochmal der geänderte Code:

Java:
public class Tier{
  String name;
  String art;
  char geschlecht;
 
  public static void main(String[] args) {
    Tier tier1 = new Tier("Dustin", "Loewe", 'm');
    Tier tier2 = new Tier("Paula", "Loewe", 'w');
    tier1.gibDatenAus();
    tier2.gibDatenAus();
    tier1.paarungsfaehig(tier2);
    }
 
  public Tier(String pName, String pArt, char pGeschlecht){
    
    name = pName;
    art = pArt;
    geschlecht = pGeschlecht;
  }
 
  public String getName() {
    return name;
  }
 
  public String getArt() {
    return art;
  }
 
  public char getGeschlecht() {
    return geschlecht;
  }
 
  public void gibDatenAus() {
    System.out.print("Das Tier hat den Namen " + name + ". ");
    System.out.print("Das Tier ist von der Art " + art + " ");
    System.out.println("und hat das Geschlecht " + geschlecht);
  }
  public boolean paarungsfaehig(Tier other) {
    if (geschlecht == other.geschlecht){
      return true;
    }else{
      return false;
    }
  }
}
 
jedoch steht nun in der cmd natürlich nicht, ob das Tier paarungsfähig ist, oder nicht.

Ja, das stimmt. Du hättest natürlich auch den Rückgabetyp auf "void" setzen können, ABER:

Generell sollte die Ausgabe von der Logik getrennt werden. Das ist guter Stil, auch wenn es natürlich in deiner Lernphase noch nicht so tragisch ist, wenn nicht.

Wenn du auf eine Ausgabe bestehst, dann ergänze diese in der main(), z.B.

Java:
if (tier1.paarungsfaehig(tier2)) {
    System.out.println("paarungsfähig");
}

Noch ein kleiner Hinweis: Der Ausdruck geschlecht == other.geschlecht liefert als Ergebnis bereits ein boolean.

Du kannst also ganz einfach anstatt von:

Java:
if (geschlecht == other.geschlecht){
      return true;
    }else{
      return false;
    }

auch

Java:
return geschlecht == other.geschlecht;
 
Gaaaanz wichtig: Ergänze in deiner main() noch

Java:
Tier tier3 = new Tier("Bruce", "Känguruh", 'm');

und probiere deine Methode "paarungsfaehig()" mit "tier1" und "tier2".

Edit: Es ist Bruce und er ist männlich
 
Zuletzt bearbeitet:
Nun habe ich es so:

Java:
public class Tier{
  String name;
  String art;
  char geschlecht;
 
  public static void main(String[] args) {
    Tier tier1 = new Tier("Dustin", "Loewe", 'm');
    Tier tier2 = new Tier("Paula", "Loewe", 'w');
    Tier tier3 = new Tier("Bruce", "Känguruh", 'm');
    tier1.gibDatenAus();
    tier2.gibDatenAus();
    tier1.paarungsfaehig(tier2);
   if (tier1.paarungsfaehig(tier2)) {
    System.out.println("paarungsfähig");
    }
  }
 
  public Tier(String pName, String pArt, char pGeschlecht){
    
    name = pName;
    art = pArt;
    geschlecht = pGeschlecht;
  }
 
  public String getName() {
    return name;
  }
 
  public String getArt() {
    return art;
  }
 
  public char getGeschlecht() {
    return geschlecht;
  }
 
  public void gibDatenAus() {
    System.out.print("Das Tier hat den Namen " + name + ". ");
    System.out.print("Das Tier ist von der Art " + art + " ");
    System.out.println("und hat das Geschlecht " + geschlecht);
  }
  public boolean paarungsfaehig(Tier other) {
    return geschlecht == other.geschlecht;
    }
  }

Trotzdem wird noch keine ausgabe gegeben, ob die Tiere paarungsfaehig sind.
 
Stimmt, jetzt habe ich das == zu einem =! gesetzt.

Leider bekomme ich jetzt den folgenden Error:

Tier.java:43:24: error: bad operand type char for unary operator '!'
return geschlecht =! other.geschlecht;
^
Tier.java:43:23: error: incompatible types: char cannot be converted to boolean
return geschlecht =! other.geschlecht;
^
2 errors
 
Zudem solltest du ja noch die Art auf Gleichheit überprüfen. Strings vergleicht man mit der equals-Methode. D.h. "Hallo".equals("Hallo") liefert true.
 
Nun bekomme ich den Fehler:
Tier.java:44:5: error: unreachable statement
return art.equals(other);
^
1 error

bei folgendem Code:

Java:
public class Tier{
  String name;
  String art;
  char geschlecht;
 
  public static void main(String[] args) {
    Tier tier1 = new Tier("Dustin", "Loewe", 'm');
    Tier tier2 = new Tier("Paula", "Loewe", 'w');
    Tier tier3 = new Tier("Bruce", "Känguruh", 'm');
    tier1.gibDatenAus();
    tier2.gibDatenAus();
    tier1.paarungsfaehig(tier2);
   if (tier1.paarungsfaehig(tier2)) {
    System.out.println("paarungsfähig");
    }
  }
 
  public Tier(String pName, String pArt, char pGeschlecht){
    
    name = pName;
    art = pArt;
    geschlecht = pGeschlecht;
  }
 
  public String getName() {
    return name;
  }
 
  public String getArt() {
    return art;
  }
 
  public char getGeschlecht() {
    return geschlecht;
  }
 
  public void gibDatenAus() {
    System.out.print("Das Tier hat den Namen " + name + ". ");
    System.out.print("Das Tier ist von der Art " + art + " ");
    System.out.println("und hat das Geschlecht " + geschlecht);
  }
  public boolean paarungsfaehig(Tier other) {
    return geschlecht != other.geschlecht;
    return art.equals(other);
    }
  }
 
Nun bekomme ich den Fehler:
Tier.java:44:5: error: unreachable statement
return art.equals(other);
^
1 error

bei folgendem Code:

Du solltest dringend versuchen die Fehlermeldungen zu lesen und zu verstehen. Da steht alles da:

unreachable statement = unerreichbarer Befehl

Und warum?

Mit dem ersten "return" wird die Methode verlassen und das zweite "return" kann nicht mehr erreicht werden.
 
Vielen Dank für Eure Hilfe! Das Programm läuft nun super!

Hier der funktionierende Code:

Java:
public class Tier{
  String name;
  String art;
  char geschlecht;
 
  public static void main(String[] args) {
    Tier tier1 = new Tier("Dustin", "Loewe", 'm');
    Tier tier2 = new Tier("Paula", "Loewe", 'w');
    Tier tier3 = new Tier("Bruce", "Känguruh", 'm');
    tier1.gibDatenAus();
    tier2.gibDatenAus();
    tier1.paarungsfaehig(tier2);
   if (tier1.paarungsfaehig(tier2)) {
    System.out.println("paarungsfähig");
    }
  }
 
  public Tier(String pName, String pArt, char pGeschlecht){
    
    name = pName;
    art = pArt;
    geschlecht = pGeschlecht;
  }
 
  public String getName() {
    return name;
  }
 
  public String getArt() {
    return art;
  }
 
  public char getGeschlecht() {
    return geschlecht;
  }
 
  public void gibDatenAus() {
    System.out.print("Das Tier hat den Namen " + name + ". ");
    System.out.print("Das Tier ist von der Art " + art + " ");
    System.out.println("und hat das Geschlecht " + geschlecht);
  }
  public boolean paarungsfaehig(Tier other) {
    return geschlecht != other.geschlecht ^ art.equals(other);
    }
  }
 
Gaaaanz wichtig: Ergänze in deiner main() noch

Java:
Tier tier3 = new Tier("Bruce", "Känguruh", 'm');
und probiere deine Methode "paarungsfaehig()" mit "tier1" und "tier2".

Probiere deine Methode, ob das Ergebnis bei allen möglichen Tierkombinationen deinen Erwartungen entspricht!
 

Zurück
Oben