Anzeige:
Ergebnis 1 bis 7 von 7

Thema: Tamagotchi

  1. #1
    Registrierter Benutzer
    Registriert seit
    06.10.2007
    Beiträge
    20

    Tamagotchi

    Hi,
    irgendwie läuft hier gerade rein gar nichts mehr.
    Kann auch sein das ich wieder total falsch angefangen habe.
    Mein Problem ist das er z.B. für hunger kein int wollte sondern boolean und als ich das reingeschrieben habe, wollte er kein boolean oder int mehr und wenn ich float nehme, will er boolean.
    Aber das ist wahrscheinlich nicht der einzige Fehler.

    public class Tamagotchi
    {
    private float _hunger;
    private int _durst;
    private boolean _muedesein;
    private int _zustand;


    public Tamagotchi(float hungrig, int durstig, boolean muede)
    {
    _hunger = hungrig;
    _durst = durstig;
    _muedesein = muede;
    }

    public void fuettern()
    {
    float _hunger = _hunger + 1;
    if (_hunger = -10)
    return "fast verhungert";
    else if (_hunger = 10)
    return "überfressen";
    else
    return _hunger;
    }

    public void stillen()
    {
    _durst = _durst - 1;
    if (_durst = 0)
    return "kein Durst";
    else if (_durst = 10)
    return "fast verdurstet";
    else
    return _durst;
    }

    public void einlullen()
    {
    _muedesein = false;
    }

    public void kitzeln()
    {
    _durst = _durst + 1;
    _hunger = _hunger +1;
    return _durst && _hunger;
    }

    public void istausgeglichen()
    {
    if (_hunger != 0 && _durst != 0 && _muedesein = true)
    return "false";
    else
    return "true";
    }

    public void istkreativ()
    {
    if (_hunger > 0 && _hunger / 3 && _durst < 4)
    return "true";
    else
    return "false";
    }

    public void istfroehlich()
    {
    if (_muedesein == true && _hunger > 5)
    return "true";
    if else (_muedesein == true && _durst < 4)
    return "true";
    else
    return "false";
    }

    public void istgereizt()
    {
    if (_hunger < 0 && 2*Math.abs(_hunger)== _durst)
    return "true";
    if else (_hunger == 0 && _durst == 0)
    return "false";
    else
    return "false";
    }

    /** Wenn alles andere nicht stimmt */
    public void ist gelangweilt()
    {
    if ()
    return true;
    else
    return false;
    }
    }

  2. #2
    Registrierter Benutzer
    Registriert seit
    02.12.2002
    Ort
    Darmstadt
    Beiträge
    615
    Hi,

    eins vorweg: Benutz doch bitte [code] Tags um deinen Java code zu posten, das macht diesen sehr viel besser zu lesen. Jetzt ein paar Anmerkungen:
    • Wenn du Methoden deklarierst, haben die entweder einen Rückgabewert oder nicht. Das Schlüsselwor "void" sorgt dafür dass sie keinen haben, als logische Konsequenz funktioniert natürlich ein "return" Statement innerhalb der Methode nicht und führt zu einem Fehler. Um das zu beheben, musst du entweder auf das "return" verzichten, oder statt "void" einen Typ angeben.
    • Das führt uns direkt zu unserem nächsten Punkt: Es kann nur ein Typ zurückgegeben werden. In Hungern gibts du z.B. mal einen String zurück und mal einen float Wert. Auch das kann nicht funktionieren.
    • Anders als in der Mathematik ist der Vergleichsoperatoren in den meisten programmiersprachen ein "==" und nicht "=" das nur Werte zuweist.


    Ich gehe mal auf ein paar Fehler ein. Zuerst betrachten wir mal die Methode fuettern(). Diese sieht bei dir so aus:
    Code:
    public void fuettern()
    {
      float _hunger = _hunger + 1;
      if (_hunger = -10)
        return "fast verhungert";
      else if (_hunger = 10)
        return "überfressen";
      else
        return _hunger;
    }
    Die Signatur der Methode (das ist die erste Zeile) sagt: Diese Methode ist öffentlich und kann von überall aufgerufen werden (Schlüsselwort public). Diese Methode gibt nichts zurück (Schlüsselwort void). Diese Methode erwartet keine Parameter (Leere Klammer nach dem Namen). Nehmen wir mal an, dass diese Methode nur den Wert der den Hunger des Tamagotchis anzeigt um 1 erhöhen soll. Das ganze if-Konstrukt ist dann überflüssig, weil wir nichts zurückgeben wollen, das können wir also entfernen:
    Code:
    public void fuettern()
    {
      float _hunger = _hunger + 1;
    }
    Was dort jetzt gemacht wird, ist aber immernoch nicht ganz richtig. Durch das Schlüsselwort float, legst du innerhalb der Methode eine weitere lokale Variable an und speicherst darin den Wert. Durch entfernen des Wortes float wird auf die private Variable zugegriffen und der Wert wird richtigerweise um 1 erhöht.
    Code:
    public void fuettern()
    {
      _hunger = _hunger + 1;
    }
    Wenn die Methode entgegen unserer Annahme doch einen Wert zurückgeben soll, müssen wir die Methodensignatur ändern. Nehmen wir diesmal an, sie solle den veränderten Wert von _hunger zurückgeben, dann sieht das so aus:
    Code:
    public float fuettern()
    {
      _hunger = _hunger + 1;
      return _hunger;
    }
    Beachte, dass der Rückgabetyp in der Methodensignatur (Zeile 1) mit dem Typ von _hunger korrespondiert. Möchtest du jetzt noch zusätzlich eine Ausgabe auf die Konsole erzeugen, bemühen wir wieder das if-Konstrukt, nutzen aber statt der Rückgabe "return" jetzt die Ausgabe "System.out.println()":
    Code:
    public float fuettern()
    {
      _hunger = _hunger + 1;
      if (_hunger == -10)
        System.out.println("fast verhungert");
      else if (_hunger == 10)
        System.out.println("überfressen");
      else
        System.out.println(_hunger);
      return _hunger;
    }
    So, ich hoffe das hat dir etwas geholfen, in dem Code sind noch viele andere Fehler, deswegen nochmal der Hinweis: Du musst wahrscheinlich nicht ein ganz Buch lesen, aber hol dir ein Buch oder eine Webseite die du als Nachschlagewerk benutzen kannst. Zum Beispiel dass hier http://www.galileocomputing.de/openbook/javainsel6/ (das Buch ist vollständig im Netz).
    Seine Rätselhaftigkeit wird nur durch seine Macht übertroffen!

  3. #3
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Zitat Zitat von mehlvogel Beitrag anzeigen
    Wenn du Methoden deklarierst, haben die entweder einen Rückgabewert oder nicht. Das Schlüsselwor "void" sorgt dafür dass sie keinen haben, als logische Konsequenz funktioniert natürlich ein "return" Statement innerhalb der Methode nicht und führt zu einem Fehler. Um das zu beheben, musst du entweder auf das "return" verzichten, oder statt "void" einen Typ angeben.
    Das stimmt so nicht: In void-Methoden ist ein return; erlaubt und sogar erwünscht (halt ohne Wert)!

    Bsp:
    Code:
    public void foo(int i){
      System.out.println(""+i);
      return;
    }
    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  4. #4
    Registrierter Benutzer
    Registriert seit
    02.12.2002
    Ort
    Darmstadt
    Beiträge
    615
    Zitat Zitat von bischi Beitrag anzeigen
    Das stimmt so nicht: In void-Methoden ist ein return; erlaubt und sogar erwünscht (halt ohne Wert)!
    Da hast du natürlich recht. (Warum sollte es erwünscht sein?)
    Seine Rätselhaftigkeit wird nur durch seine Macht übertroffen!

  5. #5
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Zitat Zitat von mehlvogel Beitrag anzeigen
    Warum sollte es erwünscht sein?
    1) Also eigentlich musst du es afaik sowieso machen - der Compiler ist nur nett genug, dir da keine Fehlermeldung zu erzeugen
    2) Es ist guter Programmierstil, dass jede Funktion mit einem return abgeschlossen wird (so ist es klar, dass die Funktion zu Ende ist).
    3) manchmal ist es notwendig:
    Code:
    public void bar(int j)
    {
      if (j==null){
        return;
      }
      j=j+1;
      System.out.println("foo"+j+"bar");
      return;
    }
    MfG Bischi

    PS: Klar könntest du den Code auch anders schreiben - so ist es aber mE sauberer...

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  6. #6
    Registrierter Benutzer
    Registriert seit
    02.12.2002
    Ort
    Darmstadt
    Beiträge
    615
    1 und 3 ist klar, bei 2 würde ich aber doch behaupten, dass das im Auge des Betrachters liegt. Aber nun gut, wir schweifen ab
    Seine Rätselhaftigkeit wird nur durch seine Macht übertroffen!

  7. #7
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    hm, wenn ich so durch das Sun-Tutorial blätteren, ist es eher ein Entgegenkommen ds Compilers, ein "leeres" return zu ignorieren.
    http://java.sun.com/docs/books/tutor...turnvalue.html
    (completes all the statements in the method)

    (2) ist zwar überlebenswichtig in Basic, aber verpönt in Pascal (ein Eingang, ein Ausgang!), und in späteren Sprachen wieder schnuppe.

    *Mareike:
    Wenn du das obige Tutorial *von vorne* durcharbeitest, sollte das Tamagotchi bald fertig sein. Schon die ersten Kapitel besprechen alles, was du brauchst.

    so long,
    Bluejay
    Eigentlich ganz einfach, wenn man's weiss!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •