Ich muss eine Formel mit bestimmten Eingabeparametern berechnen. Ich möchte einen Code erstellen, der die Best-Practice-Designprinzipien erfüllt. Während ich studiere, möchte ich von Anfang an Gutes tun. Grundsätzlich muss ich x wissen, wissend, dass es Ausgabe von Funktion f ist: x = f (a_1, a_2, a_3). Ich mache es in Eclipse. Ich habe beschlossen, 3 Klassen zu erstellen: Main, Calculation, Data. Wo von Haupt werde ich alles anrufen. Von Daten Ich werde verschiedene a_1, a_2, a_3 Arrays generieren und wieder an Main übergeben. Von der Berechnung werde ich berechnen. und dann zurück zum Main senden. Hier ist der Code:Wie Methode der Klasse 1 auf Objekt der Klasse 2 aufrufen, während in der Klasse 3 & ist es ein gutes Design?
public class Main{
public static void main( String args[]){
double[] fArray = {160, 150};
double[] aArray = {1, 1};
double[] vArray = {0.2, 0.3};
double[][] cArray = {{1, .5},{.5,1}};
double time = 1;
for (int i=0,i<3,i++){
Data myfirstobject = new Data(fArray, aArray, vArray, cArray, time);
System.out.println("message from main method");
}
}
}
Dann Klasse Daten:
public class Data{
public Data(double[] fArray, double[] aArray, double[] vArray, double[][] cArray, double time) {
System.out.println("This is my first parameterized constructor launched");
System.out.println("This is my first output from costructor : " + fArray[0] + aArray[0] + vArray[0] + cArray[0][1] + time);
}
}
Schließlich Berechnungen:
public class Calc{
public static double v_calc(double[] fArray,double[] aArray,double[] vArray,double[][] cArray,double time){
double numerator = 0;
double denumerator = 0;
for (int k=0; k<fArray.length;k++){
for (int j=0; j<fArray.length; j++) {
numerator = numerator + fArray[k]*fArray[j]*Math.exp(cArray[k][j]*vArray[k]*vArray[j]*time);
denumerator = denumerator + fArray[j]*fArray[k];
}
}
return Math.pow(1/time * Math.log(numerator/denumerator), .5);
}
}
Meine Fragen: 1) Ist es richtig ausgelegt? Vor allem, wenn ich irgendwie (weiß noch nicht wie) die Methode von Calc auf Data-Objekt in der Hauptmethode aufrufen soll.
2) Warum stehe ich vor Schwierigkeiten, wenn ich im Konstruktor nicht schreiben:
Main myfirstobject = new Data(fArray, aArray, vArray, cArray, time);
aber:
Main myfirstobject = new Data({160, 150},{1, 1},{0.2, 0.3},{{1, .5},{.5,1}},1);
In diesem Fall habe ich Fehler.
PS. Wenn Sie einen wirklich schlechten Designfehler finden, sagen Sie es bitte.
Sie können 'new double [] {160, 150}' anstelle von 'fArray' im Konstruktor schreiben. Die einzige Stelle, an der Sie 'new double []' nicht schreiben müssen, ist, wenn Sie das Array zum Zeitpunkt der Deklaration initialisieren, so wie Sie es mit 'double [] fArray = {160, 150};' getan haben. – Gendarme
In Bezug auf 'Main myfirstobject = new Data (...': Erstens, seit Sie lernen, lassen Sie uns mit der richtigen Terminologie beginnen: dieser Code ist nicht in einem Konstruktor, sondern in einer statischen Methode. Zweitens, dieser Code sollte einen Fehler bei der Kompilierung geben, denke ich, da "Data" keine Unterklasse von "Main" zu sein scheint, möchten Sie wahrscheinlich 'Data myfirstobject = new Data schreiben (...' –
jetzt ist es Sorry, ich habe kleinere Namen für StackOverflow erstellt und vergessen, dies zu ändern. – Jenya