Bluej grafische Rekursion

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • Bluej grafische Rekursion

    Hey Leute,

    ich möchte ein Programm schreiben, in dem eine double Zahl (pLaenge) in ein Textfeld eingegeben wird und wenn man den dazugehörigen Knopf drückt, wird die Methode
    public void wasIstDas(double pLaenge){
    if (pLaenge > 10){
    hatStift.bewegeUm(pLaenge);
    hatStift.hoch();
    hatStift.dreheUm(90);
    wasIstDas(pLaenge/2);
    }
    }
    ausgeführt.

    Aber immer wenn ich eine Zahl in das Textfeld eingebe, bekomme ich die Meldung: "Fehler: Methode "hatKnopf1Geklickt" von Knopf "Knopf1" nicht gefunden."


    Das ist mein Code:
    import sum.komponenten.*;
    import sum.werkzeuge.*;
    import sum.ereignis.*;

    public class WasIstDas extends EBAnwendung
    {
    // Objekte
    private Etikett hatEtikett1;
    private Textfeld hatTextfeld1;
    private Knopf hatKnopf1;
    private Zeichenbereich hatZeichenbereich1;
    private Stift hatStift;

    // Attribute
    double pLaenge;

    public WasIstDas()
    {
    super(1699, 980);
    hatEtikett1 = new Etikett(143, 130, 232, 74, "Gib die Länge ein ( > 10!)");
    hatEtikett1.setzeAusrichtung(Ausrichtung.LINKS);
    hatTextfeld1 = new Textfeld(429, 130, 276, 75, "");
    hatTextfeld1.setzeAusrichtung(Ausrichtung.LINKS);
    hatKnopf1 = new Knopf(229, 299, 364, 138, "Knopf1");
    hatKnopf1.setzeBearbeiterGeklickt("hatKnopf1Geklickt");
    hatZeichenbereich1 = new Zeichenbereich(849, 61, 818, 895, "");
    hatStift = new Stift();
    }

    public void wasIstDas(double pLaenge){
    pLaenge = hatTextfeld1.inhaltAlsGanzeZahl();
    if (pLaenge > 10){
    hatStift.bewegeUm(pLaenge);
    hatStift.hoch();
    hatStift.dreheUm(90);
    hatStift.runter();
    this.wasIstDas(pLaenge/2);
    }
    }

    public void hatKnopf1Geklickt(double pLaenge)
    {
    pLaenge = hatTextfeld1.inhaltAlsGanzeZahl();
    this.wasIstDas(pLaenge);
    }

    }

    Hoffe ihr könnt mir helfen! :thumbsup:
  • Die Methode

    Source Code

    1. public void hatKnopf1Geklickt(double pLaenge)

    hängt an der Klasse WasIstDas.

    Du rufst

    Source Code

    1. hatKnopf1.setzeBearbeiterGeklickt("hatKnopf1Geklickt");

    auf. Und wenn du die Vareable hatKnopf1 einmal überprüfst, wirst du feststellen, dass diese vom Typ Knopf ist und nicht vom Typ WasIstDas.

    Also gibt es zwei Fehlermöglichkeiten.
    Entweder muss die Methode an die Klasse Knopf oder du musst sie auf einem WasIstDas-Objekt aufrufen.


    Anmerkung:
    Ich habe keine Ahnung was das ganze Ding tun soll und warum. Deswegen kann ich die sinnhaftigkeit deines Codes nicht beurteilen. Ich habe dir also nur die Fehlermeldung erklärt.
    Gibt dieses gauenhafte Framework namens BlueJ eigentlich auch einen Stack-Trace (Methodennamen, Zeilennummern, etc.) zur Fehlermeldung aus?
  • Hallo Leute,

    ich denke ich weiß was dein Fehler ist:

    Source Code

    1. public void hatKnopf1Geklickt(double pLaenge)
    2. {
    3. pLaenge = hatTextfeld1.inhaltAlsGanzeZahl();
    4. this.wasIstDas(pLaenge);
    5. }

    Du rufst mit dem void ja nur den Dienst auf der das den Mausklick an der Stelle auf dem Bildschirm bearbeitet.
    Das heißt hier kann der Parameter pLaenge nicht übergeben werden.
    Es gibt aber noch mehr Syntax Fehler in deinem Quelltext.
    Ich habe BlueJ gerade nicht zur Hand, aber wenn ich mich nicht irre, müsste es so funktionieren:

    Source Code

    1. import sum.komponenten.*;
    2. import sum.werkzeuge.*;
    3. import sum.ereignis.*;
    4. public class WasIstDas extends EBAnwendung
    5. {
    6. // Objekte
    7. private Etikett hatEtikett1;
    8. private Textfeld hatTextfeld1;
    9. private Knopf hatKnopf1;
    10. private Zeichenbereich hatZeichenbereich1;
    11. private Stift hatStift;
    12. // Attribute
    13. double zLaenge;
    14. public WasIstDas()
    15. {
    16. super(1699, 980);
    17. hatEtikett1 = new Etikett(143, 130, 232, 74, "Gib die Länge ein ( > 10!)");
    18. hatEtikett1.setzeAusrichtung(Ausrichtung.LINKS);
    19. hatTextfeld1 = new Textfeld(429, 130, 276, 75, "");
    20. hatTextfeld1.setzeAusrichtung(Ausrichtung.LINKS);
    21. hatKnopf1 = new Knopf(229, 299, 364, 138, "Knopf1");
    22. hatKnopf1.setzeBearbeiterGeklickt("hatKnopf1Geklickt");
    23. hatZeichenbereich1 = new Zeichenbereich(849, 61, 818, 895, "");
    24. hatStift = new Stift();
    25. }
    26. public void wasIstDas(double pLaenge){
    27. if (pLaenge > 10){
    28. hatStift.bewegeUm(pLaenge);
    29. hatStift.hoch();
    30. hatStift.dreheUm(90);
    31. hatStift.runter();
    32. this.wasIstDas(pLaenge/2);
    33. }
    34. }
    35. public void hatKnopf1Geklickt
    36. {
    37. zLaenge = hatTextfeld1.inhaltAlsGanzeZahl();
    38. this.wasIstDas(zLaenge);
    39. }
    40. }
    Display All


    gruss Max