Kleine Hilfe beim Schreiben eines Programmes benötigt :D

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)) ?
 
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);
    }
  }
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben