Ja-ha, da hattet ihr recht: Das war wohl nur zum Verdeutlichen
Dafür wird's langsam knüppelhart: Ich bin jetzt bei den Objekten, Methoden und Argumenten gelandet
Daraufhin ist mein Kopf explodiert.
Ich versteh kaum was, dabei ist das Zeug für Leute ohne jede Programmiererfahrung geschrieben.
Aber da ihr ja hoffentlich nichts besseres zu tun habt, als einem Volldämlak die einfachsten Einfachheite zu erklären (vorzugsweise in Babysprache) wird auch diese Hürde genommen! Hoffe ich...
So, ich will ne Kreisberechnung, die auf die Methoden einer eigenen Klasse zugreift. Gesagt, getan:
PHP-Code:
import javax.swing.JOptionPane;
public class Kreistest {
public static void main(String[] args) {
// mit r=5 : A 78.54, U 31.416
String getr;
double getradius;
getr = JOptionPane.showInputDialog("Bitte geben Sie den Radius ein: ");
getradius = Double.parseDouble(getr);
Kreis b = new Kreis();
b.radius = getradius;
b.umf(b.radius);
b.fla(getradius);
b.ausgabe();
}
}
Und natürlich die eigene erstellte Klasse (
):
PHP-Code:
public class Kreis {
double radius, umfang, flaeche;
double umf(double umfang) {
//das ergibt keinen Sinn: Der Umfang berechnet sich aus dem Radius, der ja bei jedem Kreis bekannt ist (er ist 0, wenn er nicht auf einen anderen Wert gesetzt wird, dafür sorgt dein Konstruktor
umfang = ((radius * 2) * Math.PI);
System.out.print(" " + umfang + " ");
return umfang; // das hatte VK ja schon erklärt: Du hast hier einen lokalen Parameter umfang und ein Objektattribut Umfang, auf das Du mit this.umfang referenzieren kannst
}
void fla(double flaeche) { //hier genau das selbe wie oben. Außerdem: eine void Methode, die die Fläche berechnet und ausgibt? Das ist ... unschön.
flaeche = ((radius * radius) * Math.PI); //auch hier: das Attribut bekommst Du mit this.flaeche. Grundsätzlich ist code sehr viel besser lesbar, wenn man alle Objektattribute immer mit this aufruft
System.out.print(" " + flaeche + " ");
}
void ausgabe() {
System.out.println("Der Radius beträgt " + radius + ".");
System.out.println("Der Umfang beträgt " + umfang + ".");
System.out.println("Die Fläche beträgt " + flaeche + ".");
}
// die Methode macht nichts, weil umfang und flaeche nie befüllt werden
Kreis() {
radius = 0;
}
}
Die Aufgabe an sich ist ja richtig gelöst, zumindest wirft die Konsole die richtigen Ergebnisse aus.
Aber ich hab Fragen und kapier so einiges nicht
1. Die Methode ausgabe klappt nicht. Liegt das an der Lebensdauer? Wie müsste ich das lösen? Generell: Warum klappt der return-Befehl bei der Methode umf nicht? Bzw. wie muss ich den umsetzen? (wenn ich umfang zurückliefern möchte, kennt das eigentliche Programm aber laut Eclipse die Variable nicht)
2. Ihr seid sicher von meinem Konstruktor begeistert, der den radius auf 0 setzt.
Aber: Brauch ich den hier? Für was? Hab ich den richtig eingesetzt?
den brauchst Du nicht. Viel schöner wäre, den Kreisradius dem Konstruktor als Parameter mitzugeben...
3. Das Buch schwafelt seitenweise vom Überladen. Fühl mich schon ganz überladen
Welch Wortwitz! Jedenfalls: Ist das für irgendwas wichtig? Oder kann ich das einfach ignorieren?
überladen von Methoden: Das bedeutet schlicht nur, dass zwei verschiedene Methoden gleich heißen können, solange sie andere Parameter erwarten oder andere Rückgabewerte haben - z.B. kann die Klasse Kreis eine statische Methode "flaeche" haben, die man mit dem Radius füttert und die dann die Fläche ausgibt und eine Instanzmethode "Fläche", die die Fläche des Kreisobjektes, das sie ruft zurückgibt.
Und - zu guter viert -
4. Ich hab im Programm die Zeile b.radius = getradius; Wenn ich sie rausnehme, geht nix mehr. Wenn ich sie drinlasse, macht es aber keinen Unterschied, ob ich als Parameter b.radius oder getradius nehme (b.umf(b.radius); oder b.fla(getradius); ) Warum? Und warum muss ich b.radius trotzdem gleich getradius setzen und kann nicht einfach gleich getradius verwenden?
getradius und b.radius haben den gleichen Wert, daher macht es keinen Unterschied welche der beiden Variablen Du als Parameter übergibst, aber die Zeile
Code:
b.radius = getraius
sorgt dafür, dass der Kreisradius auch befüllt wird
Ich hoffe, ihr habt noch Geduld mit einem alten Noob