Heron-Aufgabe bin völlig planlos!

hornylist

Mitglied
hallo...

haben von der uni ne aufgabe bekommen, da soll man folgendes machen!

Es geht um das heron verfahren dass sich näherungsweise der fläche eines rechtecks nähert!


Schreiben Sie eine Klasse FixedAreaRectangle mit Attributen fur Flacheninhalt und
eine Seitenlange. Diese Klasse soll ein Rechteck reprasentieren, die stets den gleichen
Flacheninhalt hat. Fugen Sie dieser Klasse einen Konstruktor hinzu, der Flacheninhalt
und eine Seitenlange als Parameter bekommt. Weiterhin soll diese Klasse fur jede Seitenl
ange je eine Methode, die diese Seitenlange zuruckgibt, und je eine Methode, die
die Seitenlange auf die per Parameter ubergebene Lange setzt (Damit der Flacheninhalt
gleich bleibt, muss ggf. die andere Seitenlange auch angepasst werden.), haben.
(Hinweis: Da nur eine Seitenlange als Attribut gespeichert werden soll, muss bei der anderen
Seitenlange diese immer aus Flacheninhalt und der anderen Seitenlange berechnet
werden.)


aber wir dürfen nur EINE seite a und die fläche A speichern.
soweit is das noch klar.! die 2te seite b ergibt sich dann aus A/a...
und den konstruktor hab ich auch noch, und die rückgabe habe ich mittels

private function geta(){ return this.a }

gelöst! ( hoff das geht so)

ABER jetzt mein eigentliches problem!

eine methode schreiben die "die die seitenlänge auf die per parameter übergebene länge setzt"
das versteh ich nicht ganz, und schon garnicht wie ich das dann für die seite b machen soll, die ich ja nur als lokale variable hab!
hat jemand von euch da einen plan wie das gemeint is bzw eine idee für einen lösungsansatz?

vielen dank schonmal im voraus
 
Hallo,

da es ja eigentlihc keine schwere Aufgabe ist, wäre es zu einfach, wenn ich jetzt den Quelltext poste. :-)
eine methode schreiben die "die die seitenlänge auf die per parameter übergebene länge setzt"
Also so wie ich das verstanden habe brauchst du einfach eine setter-Methode für deine Seitenlänge.
Beispiel
Code:
public void setA(int a){
   this.a = a;
}

Das b eine lokale Variable ist, musst du dann wohl ändern oder ist das so vorgegeben?

MFG

zEriX
 
Moin!
Findest du nicht, das man Verständnissfragen zu einem Übungszettel nicht besser dem zuständigen Tutor stellen sollte?

Ausserdem steht in dem Aufgabentext nur, das man eine Seitenlänge und einen Flächeninhalt per Konstruktor übergeben soll. Es steht da aber nicht, das man die andere Seitenlänge nach deren Berechnung nicht global abspeichern darf....

Aber okay, falls ich mich irre,
bei der Methode setB(int b)
musst du dann halt nur a neu berechnen, ohne b abzuspeichern.. sollte doch auch kein Problem sein...


*grüssle*
MeinerEiner
 
Zuletzt bearbeitet von einem Moderator:
Naja, die Seitenlänge auf den übergebenen Parameter setzen ist ja einfach.
Damit ist anscheinend nur die entsprechende set-Methode zu deiner get-Methode gemeint. Also einfach eine Methode private void setA(int a) {this.a = a;} fertig.

Bei b funktioniert das ganze fast genauso. Nur dass du bei setB natürlich nicht die Variable b setzen darfst, sondern ausrechnen musst wie lang a dann zu sein hat und auch hier wiederum den Parameter a setzt.

Ähm ... von welcher Sprache reden wir eigentlich? Bzw. was macht das Wort "function" in deiner Methodendefinition?
 
Hallo,

Das ist zwar nicht dein eigentliches Problem, aber ich würde die geta()-Methode public machen. Außerdem gibt man in Java nicht das Schlüsselwort function an, sondern den Rückgabewert der Funktion. In deinem Fall wäre das vermutlich double.

Zu deiner eigentlichen Frage:
Den Wert der Seite a kannst du über eine einfache set-Methode setzen:
Code:
public void seta(double d) {
this.a = d;
}

Um die Seite b zu setzen (die ja nicht gespeichert wird) musst du indirekt a speichern.
Also eine Methode setb(double d), die an Hand des gewünschten b-Wertes über den Flächeninhalt das a berechnet und dieses ändert. Damit hat dann b den gewünschten Wert.

Hoffe, ich konnte Dir mit einem Denkansatz helfen. Wenn nicht, kann ich nachher auch den Code posten.

Grüße
Moltar

EDIT: Da waren wohl einige schneller *g*
EDIT2: Sorry, hatte das void als Rückgabetyp vergessen.
 
Zuletzt bearbeitet:
@ meinereiner--- hast recht, nur wenn du keine antwort bekommst hilft dir das nicht viel ;(

@moltar: warum nimmst du d bei a her? das versteh ich nicht ganz? und ist seta dann mein methodenname? kann ich den dann in einer weiteren klasse wieder aufrufen?
 
also nochmal:

ich soll für jede seite ( a und b ) JE eine methode
die die seitenlänge zurückgibt
die schaut dann so aus

public double geta() { return this.a; }


und eine die die Seitenlänge auf die per parameter übergebene länge setzt...


public void seta(double a) {this.a = a;}


versteh ich das jetzt richtig?
 
Ja. das verstehst du richtig.


Also nochmal kurz erklärt.
Eine Setter-Methode sieht so aus
Code:
public void setA(double a){
   this.a = a;
}

Die passende Getter-Methode sieht dann so aus
Code:
public double getA(){
   return a;
}

Moltar hatte bei der Setter-Methode den Rückgabewert vergessen, in diesem Fall void.

Wie bei der Setter-Methode die Variable heißt ist ganz egal, das könnte auch so aussehen
Code:
public void setA(double xy)
{
   a=xy;
}

Das gleiche brauchst du jetzt auch noch für b. B musst du dann auch als Klassen-Variable deklarieren.

Du kannst auch Methoden in anderen Klassen aufrufen, allerdings musst du dann ein Object diese Klasse dort anlegen.

Code:
public class AKlasse{

    public void machWas(){
       System.out.println("TEST");
    }

}


Code:
public class BKlasse{

    public void machWasAnderes(){
       AKlasse a = new AKlasse();
       a.machWas();
    }

}

Aber da kannst du die mal das anschauen.
http://www.galileocomputing.de/openbook/javainsel6/

Das müsste dir alles mal etwas weiter helfen.

MFG

zEriX
 
Nein, warum sollte es?

Wenn beispielsweise
Code:
public double methodenNamen(){return 3.4}
da steht, dann muss die Methode einen double-Wert zurückgeben, mittels return. D.h. es muss am ende ein return mit einem Wert da stehen.

Da man aber nicht immer irgendwas zurückgeben will, gibt es void. Das sieht dann so aus
Code:
public void methodenNamen(){}

MFG

zEriX
 
Zurück