Ich habe noch etwas schwierigkeiten bezüglich Konstuktor. Zur vereinfachung hier mal mein aktuelles Problem.
Es soll über den Konstrukter eine QuadratischeGleichung ermittelt werden. Soweit so gut. Da meine bisherien Lösungensideen nicht OOP entspachen, habe ich eben alles umgeschrieben. Den aktuellen Code findet Ihr unten. Mein Konstrukter hat so keine wirkliche Notwendigkeit (?) - abgesehen von den Paramenter. Bin ich auf den Holzweg oder passt das bisher ?
Vielen Dank.
mfg
[Java]
public static void main (String [] args) {
Scanner s1 = new Scanner (System.in);
System.out.print("Geben Sie den Wert für a ein: ");
double a = s1.nextDouble();
System.out.print("Geben Sie den Wert für b ein: ");
double b = s1.nextDouble();
System.out.print("Geben Sie den Wert für c ein: ");
double c = s1.nextDouble();
s1.close();
QuadratischeGleichung q1 = new QuadratischeGleichung(a,b,c );
q1.setA(a);
q1.setB(b);
q1.setC(c);
[/Java]
[Java]
public class QuadratischeGleichung {
public QuadratischeGleichung(double a, double b, double c) {
}
// Erster Schnittpunkt mit X-Achse:
public double solveX1() {
return solveX1= ( wert_b*(-1.0) + (Math.sqrt( this.diskriminante )) ) / (2.0*wert_a);
}
public void setA(double wert_A) {
this.wert_a = wert_A;
}
public void setB(double wert_B) {
this.wert_b = wert_B;
}
public void setC(double wert_C) {
this.wert_c = wert_C;
}
}
Nö. Du übergibst im Konstruktor 3 Werte, die aber nicht verwendet werden. Initialisiere das Objekt im Konstruktor und lösche die überflüssigen Setter.
Davon abgesehen, sind die Attribute diskriminante, solveX1 und solveX2 überflüssig. Du hast 2 Methoden welche x1 und x2 berechnen, da brauchst du nichts in irgendwelchen Attributen zwischenspeichern.
Vereinfacht sähe das so aus:
Java:
publicclassQuadratischeGleichung{privatedouble a, b, c:publicQuadratischeGleichung(double a,double b,double c){...}publicdoublex1(){...}publicdoublex2(){...}}
Bei meinen ersten Ansatz, habe ich den Konstruktor wie folgt aufgebaut. Das hat in meinen Augen mehr Sinn gemacht, wie im letzen gezeigen Code. Allerdings wurde mir gesagt, dass ich das nicht brächte wegen Redudanzgeschichte....Die Berechnung von x1 und x2 hatte ich allerdings in einer void Methode und via get aufgerufen.
Die solveX1 bzw solveX2 entsprachen unsprünglich x1 bzw x2. Ich wollte einen lesbareren variablennamen verwenden, daher habe ich x1 zu solveX1 umbenannt. Die diskriminante wollte ich noch miteinbauen, da unter der Wurzen (diskriminante) kein negativer Wert vorhanden sein darf.
Und in Java lautet die Namenskonvention keine Unterstriche zu verwenden für Variablen-Namen sondern stattdessen "wertA", "wertB", "wertC", so ganz nebenbei.
Und nein das ist nicht egal wenn der Code von anderen gelesen werden soll Nicht schlimm hier, aber wollte es mal nebenbei erwähnt haben.
Es kommt immer darauf an, ob du den Wert x nochmal im nachhinein verändern möchtest.
Warum rufst du bei der Funktion getX(), this.x() auf, das macht alles keinen Sinn
So als Tipp, was es einfacher macht Klassen und Werte auseinander zu halten: Bei Klassen wird der erste Buchstabe groß geschrieben, bei Variabeln wird alles klein geschrieben.
Hier mal ein Beispiel:
Java:
publicclassRechner{privatedouble x, y;publicRechner(){}publicRechner(double x,double y){this.x = x;this.y = y;}publicdoublegetX(){returnthis.x;}publicvoidsetX(double x){this.x = x;}// analog zu Y}