Situation
Ich habe eine Stichprobe, die mehrere Elemente enthält. Jetzt möchte ich die Stichprobe in verschiedene Klassen unterteilen und zu jeder Klasse die Anzahl der enthaltenen Elemente und die Anzahl derer, die davon korrekt sind, festhalten. "Class" bedeutet also hier nicht Java-Klasse, sondern "Stichproben-Unterteilungs-Klasse".
Die Frage ist nun, wie ich das modelliere:
Idee 1 - Mit einer Datenhaltungsklasse
Idee 2) Mit einem zweidimensionalen Array
Idee 3) Mit einer Map
Frage)
Was meint ihr dazu?
Irgendwie finde ich es sinnlos, wegen 2 Integerwerten eine extra Klasse aufzumachen, die überhaupt nichts tut, als eben diese Werte zu speichern.
Vor allem passiert mir so etwas dauernd und ich habe dann jedesmal, wenn ich 2 oder mehr Elemente klammern will irgendeine neue kleine Klasse.
Andersherum ist das Speichern in arrays nicht typsicher und überhaupt kommt es mir nicht sehr elegant vor. Am liebsten wäre es mir, man könnte solche einfachen Klassen zur Laufzeit erzeugen.
Und das mit der Map find ich irgendwie nicht so prickelnd, das kommt mir so vor wie eine nichtstandardisierte Klassen-Emulation... Vor allem, wenn ich noch den Anteil in Prozent hinzufüge,
brauche ich ja noch float Werte und müsste die Map auf Object setzen und hin und her casten...
Das ist eine eher philosophische Frage. Ich weiss, dass alle 3 Möglichkeiten funktionieren, aber ich würde gerne wissen, welche die beste und eleganteste ist, vor allem weil ich dieses Problem öfters habe.
Antwort)
Ok vielen Dank! Ich werde also die Variante mit der Klasse nehmen.
P.S.)
Jetzt frage ich mich nur, ob ich den Namen der Klasse mit hineinnehme, da ich ihn im Beispiel über die Position des Objektes im Array bestimmen kann und dadurch einen inkonsistenten Zustand möglich mache (classifier.getClasses != classStatistics.className), bei anderen Benutzungsmöglichkeiten wäre der Name aber sicher nützlich...
Ich habe eine Stichprobe, die mehrere Elemente enthält. Jetzt möchte ich die Stichprobe in verschiedene Klassen unterteilen und zu jeder Klasse die Anzahl der enthaltenen Elemente und die Anzahl derer, die davon korrekt sind, festhalten. "Class" bedeutet also hier nicht Java-Klasse, sondern "Stichproben-Unterteilungs-Klasse".
Die Frage ist nun, wie ich das modelliere:
Idee 1 - Mit einer Datenhaltungsklasse
Java:
public class ClassStatistics
{
public String className;
public int occurrences;
public int goodMatches;
public ClassStatistics(String className, int occurrences, int goodMatches)...
}
public class Analyse
{
...
private static ClassStatistics[] classStatistics(SampleEntry[] sample, Classifier classifier)
...
ClassStatistics[] classStatistics = classStatistics(sample,classifier);
for(ClassStatistics statistics: classStatistics)
System.out.println(statistics.className+" enthält "+statistics.occurrences+" Elemente, davon korrekt: "+statistics.goodMatches);
...
}
Idee 2) Mit einem zweidimensionalen Array
Java:
public class Analyse
{
...
private static int[][] classStatistics(SampleEntry[] sample, Classifier classifier)
...
int[][] classStatistics = classStatistics(sample,classifier);
for(int i=0;i<classStatistics;i++)
System.out.println(classifier.getClasses[i]+" enthält "+classStatistics[i][0]+" Elemente, davon korrekt: "+classStatistics[i][1]);
...
}
Idee 3) Mit einer Map
Java:
public class Analyse
{
...
private static Map<String,Integer>[] classStatistics(SampleEntry[] sample, Classifier classifier)
...
Map<String,Integer>[] classStatistics = classStatistics(sample,classifier);
for(int i=0;i<classStatistics;i++)
System.out.println(classifier.getClasses[i]+" enthält "+classStatistics[i].get("occurrences")+" Elemente, davon korrekt: "+classStatistics[i].get("goodMatches"));
...
}
Frage)
Was meint ihr dazu?
Irgendwie finde ich es sinnlos, wegen 2 Integerwerten eine extra Klasse aufzumachen, die überhaupt nichts tut, als eben diese Werte zu speichern.
Vor allem passiert mir so etwas dauernd und ich habe dann jedesmal, wenn ich 2 oder mehr Elemente klammern will irgendeine neue kleine Klasse.
Andersherum ist das Speichern in arrays nicht typsicher und überhaupt kommt es mir nicht sehr elegant vor. Am liebsten wäre es mir, man könnte solche einfachen Klassen zur Laufzeit erzeugen.
Und das mit der Map find ich irgendwie nicht so prickelnd, das kommt mir so vor wie eine nichtstandardisierte Klassen-Emulation... Vor allem, wenn ich noch den Anteil in Prozent hinzufüge,
brauche ich ja noch float Werte und müsste die Map auf Object setzen und hin und her casten...
Das ist eine eher philosophische Frage. Ich weiss, dass alle 3 Möglichkeiten funktionieren, aber ich würde gerne wissen, welche die beste und eleganteste ist, vor allem weil ich dieses Problem öfters habe.
Antwort)
Ok vielen Dank! Ich werde also die Variante mit der Klasse nehmen.
P.S.)
Jetzt frage ich mich nur, ob ich den Namen der Klasse mit hineinnehme, da ich ihn im Beispiel über die Position des Objektes im Array bestimmen kann und dadurch einen inkonsistenten Zustand möglich mache (classifier.getClasses != classStatistics.className), bei anderen Benutzungsmöglichkeiten wäre der Name aber sicher nützlich...
Zuletzt bearbeitet: