You are not logged in.

  • Login

Dear visitor, welcome to Coder Forum. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

Furushy

Unregistered

1

Sunday, October 9th 2011, 12:17pm

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

Quoted

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:

Quoted

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:

2

Saturday, October 29th 2011, 12:33am

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?

loneship1992

Unregistered

3

Monday, October 31st 2011, 1:01am

Hallo Leute,

ich denke ich weiß was dein Fehler ist:

Source code

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

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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 zLaenge;
 
 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){
 
 if (pLaenge > 10){
 hatStift.bewegeUm(pLaenge);
 hatStift.hoch();
 hatStift.dreheUm(90);
 hatStift.runter();
 this.wasIstDas(pLaenge/2);
 }
 }
 
 public void hatKnopf1Geklickt
 {
 zLaenge = hatTextfeld1.inhaltAlsGanzeZahl();
 this.wasIstDas(zLaenge);
 }
 
 }


gruss Max

Similar threads

Social bookmarks