sagen, dass ich eine Gleichung haben:Java - Funktion/Methode, die sowohl skalare und Vektorargumente akzeptiert?
out = Math.exp(x);
wo x
ein double
ist.
sagen, dass ich es 10.000 mal tun, so werfe ich es in einer Funktion:
public double doMath(double x) {
return Math.exp(x);
}
einfach genug. Ich kann jeden Skalar es passieren:
double in = 1.1234;
out = doMath(in);
// Outputs something like: 1.1313368652
aber versucht, einen Vektor, um es (1D-Array, 2D-Array, und so weiter ...) zu passieren alle möglichen Probleme verursacht:
double[] in = {0.1234, 5.6789};
out = doMath(in);
// Outputs something like: IT DOESN'T OUTPUT! CRASH CRASH CRASH!
Was ich möchte, ist in der Lage zu sein, jedes Doppel (Skalar, 1D, 2D, 3D, usw.) zu übergeben und die gleiche Größe wie die Eingabe zurückzugeben, nachdem es die Gleichung durchlaufen hat, wobei die Arithmetik auf jedes Element angewendet wird.
Testfälle
double in = 0.1234;
/*
1.1313368652
*/
double[] in = {0.1234, 5.6789};
/*
[ 1.1313368652, 292.6273627191 ]
*/
double[][] in = {{0.1234, 5.6789},
{0.9876, 5.4321}};
/*
[ [ 1.1313368652, 292.6273627191 ]
[ 2.6847832542, 228.6288622608 ] ]
*/
double[][][] in = {{{0.1234, 5.6789}, {0.9876}},
{{5.4321}},
{{0}, {1}}};
/*
[ [ [ 1.1313368652 292.6273627191 ] [ 2.6847832542 ] ]
[ [ 228.6288622608 ] ]
[ [ 1 ] [ 2.7182818285 ] ] ]
*/
Der einzige Weg, ich jetzt overloading haben verwendet:
public double doMath(double x)
public double[] doMath(double[] x)
public double[][] doMath(double[][] x)
public double[][][] doMath(double[][][] x)
Aber das ist langweilig. Kann eine einzelne Funktion geschrieben werden, um irgendeine Dimension des Arguments aufzunehmen und etwas Ähnliches wie die Beispiele zu liefern, die ich zur Verfügung gestellt habe?
Vielleicht gibt es einen Namen dafür, und ich weiß es einfach nicht? Dies sind alles nur Arrays, aber ich behandle sie (und mache andere Operationen an ihnen), als wären sie Matrizen unterschiedlicher Größe.
Edit # 1 - Zusätzlich ...
habe ich versucht, so etwas wie:
public double doMath(int... x)
Und es funktionierte für skalare und 1D, aber nichts mit höheren Dimensionen.
Edit # 2
Ist es möglich, eine benutzerdefinierte Klasse zu schreiben, das automatisch erledigt dies für mehrere Funktionen?
Zum Beispiel, sagen, ich habe drei verschiedene Funktionen bekommen:
public mysteryClass firstFunct(mysteryClass x) {
return Math.pow(x, 2);
}
public mysteryClass secondFunct(mysteryClass x) {
return Math.exp(x);
}
public mysteryClass thirdFunct(mysteryClass x) {
return (1 + x)/2;
}
Und jede Funktion verwendet werden kann - als ist - mit einer beliebigen Anzahl von Dimensionen? mysteryClass
würde dann jedes Element automatisch rekursiv durch die Funktionen laufen lassen, ohne die Funktionen ändern zu müssen oder jedes Element manuell durchlaufen zu müssen? Nicht sicher, ob es für ein Objekt möglich ist, zu wissen, wie es verwendet wird, und entsprechend anzupassen.
Vielen Dank im Voraus.
Das ist kein Polymorphismus. Es ist überladen. – ajb
@ajb danke, machte die Änderung. – Birrel