Zeichenketten-Liste filtern

Jay1980

Bekanntes Mitglied
Servus,

ich habe eine Liste von Zeichenketten, diese sollen gefiltert werden. Die Größe der Eingangsliste ist bekannt und die Anzahl der Ausgangszeichenketten auch. Die Methoden sind schon ausprogrammiert, aber das Ergebnis stimmt nicht - ich beiß mir schon seit Tagen die Zähne aus und habe mich nun entschlossen einen Fachmann einen Blick da rein werfen zu lassen. Im Code stehen die Erläuterungen. Danke vorab fürs Feedback. Falls mir da jemand beim Entwickeln als eine Art Tutor zur Seite stehen will, dann bitte vorher Bescheid geben, damit Ablauf und Aufwandsentschädigung geklärt werden können. Ziel ist also in keinem Fall, dass mir einer eine funktionierende Lösung liefert, sondern, dass ich kapiere, was da schief läuft und dies dann anpasse.

Hier ist die Datei - es ist nur eine: http://www.jochen-bauer.net/downloads/joba-filter-12022011.txt
 
Zuletzt bearbeitet:

XHelp

Top Contributor
Mach dir Debugausgaben rein und schaue Schritt für Schritt nach, wie es abläuft.
Oder beschreib hier, was du überhaupt haben willst.
Es lohnt sich aber definitiv nachzulesen, wie man eine Textdatei in Java einließt und die ganzen Daten in eine Datei auszulagern.
 
J

JohannisderKaeufer

Gast
Debuggen ist schön und gut. Ich finde aber das diese Aufgabe sich hervorragend für ein TestDrivenDevelopment eignet.

Ich gehe mal davon aus, das das Ergebnis für eine gegebene Aufgabenstellung bekannt ist.
Wenn auch nur für das kleine Auskommentierte Beispiel. Darauf Aufbauend ein paar Testsfälle mit JUnit schreiben und regelmäßig ausführen.

Damit das ganze Anwendbar wird, sollte die Logik die in der main-Methode steckt in eigene Methoden gepackt werden, damit man zum Beispiel eine Methode analyze(List<String> input) bekommt die als Ergebnis eine Liste von Strings zurückliefert. Am besten sogar für jeden eingesetzten Filter eigene Methoden und entsprechende Tests.

Wenn die Struktur deines Programmes erstmal paßt,
entsprechende Testfälle vorhanden sind,
dann kannst du deine Tests laufen lassen und
bekommst schnell die Information,
wo die Probleme entstehen
ohne Mühsam und manuell jedes mal auf Debug-Ausgaben zurückgreifen zu müssen.

Wenn ich dir genauer erklären soll, wie ich diese Aufgabe angehen würde, kannst du dich gerne nochmals melden.
 

Jay1980

Bekanntes Mitglied
Danke, ich weiß was Test Driven Development ist, in der Tat es existieren in der 'richtigen' Anwendung auch schon Tests und auch viele Debugmeldungen, im richtigen Programm kann man die Dateien auch einlesen.

Da ich aber der Sache nicht auf die Schliche komme, habe ich gedacht ist es klug, das Problem voll zu isolieren und so verfügbar zu machen, dass ein jeder das in seiner IDE der Wahl einpflegen und losschicken kann.

Die kleinen Testfälle laufen schon, aber der Sprung zum nächsten muss noch gemeistert werden. Ich habe nur selbst ausgedachte Zeichenkettenbündel und einige 'richtige', von denen das gezeigte aber das kleinste ist. Für mich ist der nächste Schritt klar, ich muss den ersten Filter so einbauen, dass ich das richtige Ergebnis habe. In der aktuellen Version ist alles noch etwas übersichtlicher:
http://www.jochen-bauer.net/downloads/joba-filter-13022011.txt

Es ist auch sicher der erste Filter. Der reißt mir zuviel raus. Die Vergleichsfunktion ist richtig implementiert (liefert auch oft Werte zwischen 20 und 90 Prozent Ähnlichkeit). Es liegt am Ablaufen (bis jetzt zwei for-Schleifen für den Vergleich einer jeden mit jeder Sequenz und wenn eine Sequenz muckt, soll diese Vergleichssequenz aus der Liste rausfallen - leider fallen halt viel zu viele raus.

Mir gehen echt die Ideen aus. Andere redeten irgendwas von Clusteranalyse, aber derjenige der bereits implementiert hatte, meinte: Jede Sequenz als Basissequenz mit jeder anderen als Vergleichssequenz vergleichen, Ähnlichkeit ermitteln und bei Unstimmigkeit die Vergleichssequenz rausschmeißen.

Danke vorab.
 
Zuletzt bearbeitet:

Paeddah

Mitglied
Hi!

Du hast einen Denkfehler:

Die Anforderung war ja, jedes Element einmal mit jedem anderen Element zu vergleichen.

Du vergleichst aber jedes Element mit jedem Element - also auch sich selbst -.
Java:
        for ( String seq1 : msa )
        {
            // Nimm erste Sequenz als Basis
            for ( String seq2: msa )
            {

Was du möchstest ist jedoch das Folgende:

Java:
for ( int outerIndex = 0; outerIndex < msa.size(); outerIndex++)
        {
            for ( int innerIndex = outerIndex+1; innerIndex < msa.size(); innerIndex++ )
            {
                String seq1 = msa.get(outerIndex);
                String seq2 = msa.get(innerIndex);

Führe ich dein Programm mit dieser Schleife aus, so habe ich nach dem ersten Schritt noch 191 Elemente in der Liste.

Ich hoffe, dass hilft dir schon mal weiter.

Grüße

Päddah
 

Jay1980

Bekanntes Mitglied
Sehr guter Hinweis danke, bringt mich bestimmt in die richtige Richtung. Dazu kommt natürlich noch, dass bei jedem Vergleich mit sich selbst, ein Grund für den Rausschmiss gefunden ist. Im anderen Programm habe ich schon einen Ausbruch für identische Sequenzen geschrieben aber dass ich nicht immer von 0 beim Durchlaufen des inner-Index starten muss und auch nicht sollte, daran dachte ich so nicht.
 
Zuletzt bearbeitet:

Jay1980

Bekanntes Mitglied
Bin weiter gekommen und habe nun die Methoden so umgestellt, dass diese testbar sind:
http://www.jochen-bauer.net/downloads/joba-filter-15022011.txt

Aktuell habe ich 160 Sequenzen im Set. Ebenso habe ich die erwartete Lösung eingestellt (msaExp). Schick ich dieses durch den Filter, dann ist zumindest das Verhalten korrekt, dass alle Sequenzen drin bleiben. Jetzt muss ich mal etwas mit dem Tool 'diff' rumspielen, um genau die Sequenzen ausfindig zu machen die in der Musterlösung sind, aber nicht in meiner Liste. Für weitere Tipps bin ich natürlich dankbar.

Ich habe nicht JUnit genommen, sondern eine Methode runTests() die die anderen Testmethoden ausführt. Klar, da gibts viel Redundanz aber ich denke für den Problem-Isolationsgedanken ist dies so besser. Außerdem kann jemand der sich nicht mit Unittests auskennt diesen Weg so auch direkt nutzen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Best Practice Auslesen von Zeichenketten (Frage, Antworten, usw) Allgemeine Java-Themen 4
T Zeichenketten zerteilen Allgemeine Java-Themen 2
B Liste aller Kombintionen mit Einschränkungen Allgemeine Java-Themen 8
TheSepp Wie kann man Leerzeichen aus einer Array liste entfernen? Allgemeine Java-Themen 10
B Liste ändern während Iteration über Diese? Allgemeine Java-Themen 16
D Erste Schritte Liste erweitern Allgemeine Java-Themen 11
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
L allgemein Strings händisch in Liste sortieren Allgemeine Java-Themen 47
M einfach verkettete Liste verstehen Allgemeine Java-Themen 23
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
Gaudimagspam Skip Liste erstellen in Java Allgemeine Java-Themen 3
G Java Editor Löschen doppelter Zahlen einer Liste Allgemeine Java-Themen 2
bueseb84 Spring Boot Entity mit Liste Allgemeine Java-Themen 4
MiMa Werte in liste speichern? Allgemeine Java-Themen 3
Curtis_MC Collections Liste anhand mehrere Kriterien sortieren Allgemeine Java-Themen 6
K verkettete Liste Allgemeine Java-Themen 3
G Liste (UsageStats) sortieren (Android) Allgemeine Java-Themen 5
T Google Links in einer Liste Allgemeine Java-Themen 4
looparda Liste filtern nach Prädikaten verschiedener Typen Allgemeine Java-Themen 3
OSchriever Einfach verkettete Liste ändern Allgemeine Java-Themen 43
L Liste überschreibt alte Elemte Allgemeine Java-Themen 10
H Länge einer verketteten Liste Allgemeine Java-Themen 4
E Erstellen einer Liste mit einer maximalen Menge an Elementen Allgemeine Java-Themen 13
P Element einer Liste wurde hinzugefügt, aber es gibt keinen Zugriff Allgemeine Java-Themen 2
S Methoden Liste soll Methode aus innerer Klasse aufrufen Allgemeine Java-Themen 4
L Erste Schritte Liste von Datums filter nach Monate Allgemeine Java-Themen 4
Y Liste in Stream Packen Allgemeine Java-Themen 1
K Einfache Verkettete Liste mit Node Allgemeine Java-Themen 3
perlenfischer1984 Reflection : Element in generische Liste hinzufügen Allgemeine Java-Themen 4
perlenfischer1984 Liste mit generics zurück liefern Allgemeine Java-Themen 8
S Verkettete (Teil)Liste sortieren ( rekursiv bis n) Allgemeine Java-Themen 2
G Liste zwischen zwei Kalenderdaten erstellen Allgemeine Java-Themen 3
B Wie vergleiche ich Strings in einer Liste? Allgemeine Java-Themen 5
Viktim Threads Liste In unterschiedlichen Threads bearbeiten Allgemeine Java-Themen 23
A Collections Inhalt einer Liste mit Inhalt anderer Liste vergleichen ? Allgemeine Java-Themen 7
I Abstrakte Datentypen - Liste Allgemeine Java-Themen 9
D Datentypen Klassenattribut aus Objekt in generischer Liste Allgemeine Java-Themen 15
P Liste zu Objekt umwandeln Allgemeine Java-Themen 4
Z In die Liste kann ich nichts adden Allgemeine Java-Themen 16
C Liste checken auf MINDESTENS ein Objekt | Bukkit Allgemeine Java-Themen 3
M liste von listen anders ausgeben Allgemeine Java-Themen 1
B Per Buttonklicks einer Liste Wörter hinzufügen - Wie umsetzen? Allgemeine Java-Themen 11
H Liste sortieren anhand optionalem Property Allgemeine Java-Themen 3
L Liste führt sich nicht weiter Allgemeine Java-Themen 5
A Input/Output Liste der Dateien in einem Ordner in einer Jar Datei erhalten Allgemeine Java-Themen 11
J Fragen zu generischer doppelt verketteter Liste (bei fehlendem Grundverständnis) Allgemeine Java-Themen 1
B Prüfen, ob ein Element in der Liste nicht existiert Allgemeine Java-Themen 3
B Klassen JTable mit einer Liste Allgemeine Java-Themen 0
X HTTP Auslesen der Ergebnisse von einer Webseite und in eine Liste packen Allgemeine Java-Themen 1
A Auslesen einer Datei sowie ausgeben als Liste in App Allgemeine Java-Themen 5
E Liste löscht sich selbstständig Allgemeine Java-Themen 5
H Liste von Objekten generisch sortieren Allgemeine Java-Themen 0
D Liste anhand Standardnormalverteilung befüllen Allgemeine Java-Themen 1
M Threads synchroner Zugriff (add/delete/read) auf eine Liste Allgemeine Java-Themen 6
T Datentypen Eine Liste - verschiedenen Klassen - eine Abstracte Klasse Allgemeine Java-Themen 3
M Werte aus DB in Liste speichern ohne mehrfach speicherung Allgemeine Java-Themen 18
G Liste anzahl der gleichen Objekte Allgemeine Java-Themen 6
S Pattern.Match Suche: For Schleife einbinden und in Liste schreiben Allgemeine Java-Themen 3
O aus Liste ein beliebiges Element auswählen Allgemeine Java-Themen 7
J Liste aller Com-Ports - zweistellige Ports? Allgemeine Java-Themen 15
O MVC - wo Liste der ComboBox-Items ermitteln Allgemeine Java-Themen 3
MiMa Liste von Pfaden in eine textArea schreiben Allgemeine Java-Themen 7
K kontinuierlich aktuelle Bestellsystem-Liste mit farbigem Status Allgemeine Java-Themen 2
A Auswählbare Liste Allgemeine Java-Themen 2
D Sortieren von Liste zu unperformant Allgemeine Java-Themen 6
N Liste gesucht Allgemeine Java-Themen 2
Z Sortiertes Einfügen in doppelt verkettete Liste Allgemeine Java-Themen 5
S Probleme beim Auslesen einer Liste Allgemeine Java-Themen 8
O JSON String bauen aus Liste Allgemeine Java-Themen 2
M Über Liste verschiendene JComponents mit eigenem implementierten Interface ansprechen Allgemeine Java-Themen 7
T Hashmap mit geordneter/ungeordneter liste als Value Allgemeine Java-Themen 5
D Zugriff auf Array-Liste Allgemeine Java-Themen 19
S Threads Liste mit Objekten in Teillisten zerlegen und abarbeiten Allgemeine Java-Themen 3
R ThreadPool - vorhandene thread liste überprüfen bzw. aufräumen Allgemeine Java-Themen 3
pg1337 Liste füllen Allgemeine Java-Themen 2
U Große Liste von Strings mit indiziertem Zugriff Allgemeine Java-Themen 31
B Properties File Liste Allgemeine Java-Themen 3
Gossi Collections Liste zusammenfassen für JSP Allgemeine Java-Themen 4
Gossi Collections (Unbekannte) Liste Sortieren Allgemeine Java-Themen 10
T Collections Liste schnell/nebenläufig durchgehen Allgemeine Java-Themen 2
M Objekt aus Liste in Liste suchen/löschen Allgemeine Java-Themen 6
Q "Doppelte" Einträge einer Liste entfernen Allgemeine Java-Themen 14
C Exponentielle Verteilung in einer Liste Allgemeine Java-Themen 7
Nic.o liste der installierten Zertifikate ?! Allgemeine Java-Themen 3
T Liste mit GregorianCalendar-Objekten in List einlesen, mit Collection sortieren und ausgeben Allgemeine Java-Themen 3
M Verständnisfragen bezüglich Liste Allgemeine Java-Themen 3
S AWT Wie bekomme ich eine Liste aller chars in einem Font? Allgemeine Java-Themen 3
S Aus einer Liste<Oberklasse> alle Elemente die eine bestimmte Unterklasse von Oberklasse haben filter Allgemeine Java-Themen 8
K Liste aller implementierenden Klassen einer Oberklasse anzeigen Allgemeine Java-Themen 4
M Eintrag verschwindet aus Liste Allgemeine Java-Themen 3
E Objekte in einer Liste suchen. Allgemeine Java-Themen 4
I Über eine Liste iterieren und Objekte löschen. Wie löst man das sauber? Allgemeine Java-Themen 5
reibi Kopie einer Liste Allgemeine Java-Themen 4
N Liste mit Map abgleichen extrem langsam Allgemeine Java-Themen 6
C Darstellung der Liste bei vielen Daten extrem langsam Allgemeine Java-Themen 11
T Liste sortieren Allgemeine Java-Themen 6
L Objekte in Liste packen Allgemeine Java-Themen 2
N Liste aendern waehrend des iterierens ueber selbige Allgemeine Java-Themen 11
B Datenstruktur: Liste Allgemeine Java-Themen 5
S Liste mit verschiedenden Objekten Allgemeine Java-Themen 15

Ähnliche Java Themen

Neue Themen


Oben