hilfe :-( doppelte einträge aus'n vector entfernen...

Benutzeravatar
oren78
BSc Spammer
BSc Spammer
Beiträge: 1373
Registriert: 17. Nov 2006 17:47
Wohnort: Darmstadt

hilfe :-( doppelte einträge aus'n vector entfernen...

Beitrag von oren78 »

bin schon an verzweifeln mit diesen besch*** vektoren :-(
kann mir jemand verraten was hier falsch ist ??

Code: Alles auswählen

		int len = nodes.size();  // nodes = Vector<String>
		
	    for (int i = 0; i < nodes.size(); i++)
	    {
		      String test = nodes.get(i);
		      
		      for (int j = i + 1; j < nodes.size() - 1; j++)
		      {
		         String s = nodes.get(j);
		         
		         if (s.equals(test)) nodes.set(i,  nodes.remove(j));
		      }
	    }

// Das ist das resultat für eine test-eingabe:

b, b, b, a, a, a, a, a, a, b, 
-------------------------------------------------------
a, a, b, b, b, 
ich will mehrfach vorkommende einträge löschen, was irgendwie nicht so ganz klappt...
hab schon versuch den vector in ein HashSet zu konvertieren, anschliessend einen temporären vector erzeugen und mittels addAll(HashSet) das ganze wieder reinkopieren (ohne die duplikate, da ja bekannterweise mengen KEINE duplikate beinhgalten...) aber wie auch immer, funzt irgendwie alles nicht...

wer hat rat ?? google'n hat ebenfalls nicht viel geholfen :-)
"Unter allen menschlichen Entdeckungen sollte die Entdeckung der Fehler die wichtigste sein.", Stanisław Jerzy Lec

Benutzeravatar
Maeher
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 282
Registriert: 14. Okt 2007 23:02
Kontaktdaten:

Re: hilfe :-( doppelte einträge aus'n vector entfernen...

Beitrag von Maeher »

Das einzige was mir jetzt auffällt ist, dass es auch bei der zweiten Schleife meiner Meinung nach nodes.size() sein sollte, also ohne das -1. Ansonsten wird ja der letzte Knoten nie überprüft.
Allerdings, wie kommt es eigentlich zu deinen Dubletten? Sollte doch normal nicht vorkommen.

Benutzeravatar
oren78
BSc Spammer
BSc Spammer
Beiträge: 1373
Registriert: 17. Nov 2006 17:47
Wohnort: Darmstadt

Re: hilfe :-( doppelte einträge aus'n vector entfernen...

Beitrag von oren78 »

ist etwas kompliziert zu erklären warum ich duplikate da habe...erzähl ich dir aber gerne bei einem schönen tässchen cappuchino im C-Pool :-)

übrigens egal ob nodes.size() ODER nodes.size() - 1 bei beidem kriege ich kein erwünschtes ergebnis, also: "a,b"
"Unter allen menschlichen Entdeckungen sollte die Entdeckung der Fehler die wichtigste sein.", Stanisław Jerzy Lec

maikg2
Mausschubser
Mausschubser
Beiträge: 95
Registriert: 18. Okt 2005 22:29
Wohnort: Darmstadt

Re: hilfe :-( doppelte einträge aus'n vector entfernen...

Beitrag von maikg2 »

Hi.

Ich versteh nicht ganz warum du die List.set(..) Methode benötigst. Ein List.remove(..) reicht doch vollkommen aus!?
Allerdings darfst du auch nicht vergessen "j" um einen zu dekrementieren, weil du sonst eine Stelle im Array überspringst. Sowas wie:

Code: Alles auswählen

if (s.equals(test)) nodes.remove(j--);
// edit:
Nee, das kannst du auch nicht so einfach machen. Wenn das Element gleich nach deinem "test" kommt hast du keines mehr drin.
Wieso hast du überhaupt duplikate drin? Verwende doch vor dem einfügen ein List.contains(..) umzu überprüfen ob das schon drin ist.
Zuletzt geändert von maikg2 am 8. Mai 2008 23:26, insgesamt 1-mal geändert.

Benutzeravatar
Maeher
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 282
Registriert: 14. Okt 2007 23:02
Kontaktdaten:

Re: hilfe :-( doppelte einträge aus'n vector entfernen...

Beitrag von Maeher »

oren78 hat geschrieben:ist etwas kompliziert zu erklären warum ich duplikate da habe...erzähl ich dir aber gerne bei einem schönen tässchen cappuchino im C-Pool :-)
Hab gehört, Getränke wäre da untersagt. Schade. :)

aber maikg2 dürfte Recht haben, dass das ein Problem ist. Ob es natürlich alles ist, weiß ich nicht, werde deinen geposteten code gleich aber mal ausprobieren.

michael2k5
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 117
Registriert: 2. Dez 2005 19:22
Wohnort: Darmstadt-Eberstadt
Kontaktdaten:

Re: hilfe :-( doppelte einträge aus'n vector entfernen...

Beitrag von michael2k5 »

vom prinzip her würde ich mir das nicht so kompliziert machen.

mach einfach nen neuen leeren vector, geh den alten durch und prüfe für jedes element, ob das element schon im neuen vector drine ist. wenn nicht, dann machs halt rein. dein zwischenvector hat dann keine duplikate. was hälst du davon? ^^

Benutzeravatar
oren78
BSc Spammer
BSc Spammer
Beiträge: 1373
Registriert: 17. Nov 2006 17:47
Wohnort: Darmstadt

Re: hilfe :-( doppelte einträge aus'n vector entfernen...

Beitrag von oren78 »

erst mal danke für die tipps...

also, habs jetzt so wie's maik gesagt hat:

Code: Alles auswählen

		int len = nodes.size();
		
	    for (int i = 0; i < nodes.size(); i++)
	    {
		      String test = nodes.get(i);
		      
		      for (int j = i + 1; j < nodes.size() - 1; j++)
		      {
		         String s = nodes.get(j);
		         
		         if (s.equals(test)) nodes.remove(j--);
		      }
	    }
und immernoch das selbe traurige resultat :-)

Code: Alles auswählen

b, b, b, a, a, a, a, a, a, b, 
-------------------------------------------------------
a, b, b, 
"Unter allen menschlichen Entdeckungen sollte die Entdeckung der Fehler die wichtigste sein.", Stanisław Jerzy Lec

Benutzeravatar
oren78
BSc Spammer
BSc Spammer
Beiträge: 1373
Registriert: 17. Nov 2006 17:47
Wohnort: Darmstadt

Re: hilfe :-( doppelte einträge aus'n vector entfernen...

Beitrag von oren78 »

egal, ich machs jetzt auf die nicht konventionelle art wie's michael2k5 gesagt hat, scheint von der logik her schon mal zu klappen :-)
"Unter allen menschlichen Entdeckungen sollte die Entdeckung der Fehler die wichtigste sein.", Stanisław Jerzy Lec

Benutzeravatar
Maeher
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 282
Registriert: 14. Okt 2007 23:02
Kontaktdaten:

Re: hilfe :-( doppelte einträge aus'n vector entfernen...

Beitrag von Maeher »

bei dem oben noch die -1 raus, dann klappts ;) gerade ausprobiert

Mspringer
Nerd
Nerd
Beiträge: 555
Registriert: 19. Okt 2006 14:41
Wohnort: Darmstadt / Alzenau
Kontaktdaten:

Re: hilfe :-( doppelte einträge aus'n vector entfernen...

Beitrag von Mspringer »

Doublette löschen würde ich nicht über den Index machen sondern über das gesuchte Element. Du musst bedenken, wenn du per Index ein Element vorne löscht, rutschen die Elemente an der stelle I+1 auf die stelle I auf. Damit überspringst du Elemente. Den Fehler hatte ich anfänglich nämlich auch gemacht und mich gewundert warum Schwachsinn bei rauskommt.

Aber Michael2k5s vorschlag ist imho sogar ne schönere Lösung.

Benutzeravatar
oren78
BSc Spammer
BSc Spammer
Beiträge: 1373
Registriert: 17. Nov 2006 17:47
Wohnort: Darmstadt

Re: hilfe :-( doppelte einträge aus'n vector entfernen...

Beitrag von oren78 »

Mspringer hat geschrieben:....Du musst bedenken, wenn du per Index ein Element vorne löscht, rutschen die Elemente an der stelle I+1 auf die stelle I auf. Damit überspringst du Elemente.
nicht ganz mein lieber ;-)
Java API hat geschrieben:Removes the element at the specified position in this Vector. Shifts any subsequent elements to the left (subtracts one from their indices). Returns the element that was removed from the Vector.
"Unter allen menschlichen Entdeckungen sollte die Entdeckung der Fehler die wichtigste sein.", Stanisław Jerzy Lec

Benutzeravatar
oren78
BSc Spammer
BSc Spammer
Beiträge: 1373
Registriert: 17. Nov 2006 17:47
Wohnort: Darmstadt

Re: hilfe :-( doppelte einträge aus'n vector entfernen...

Beitrag von oren78 »

@Maeher

lots of thanks, klappt also doch noch :-)
"Unter allen menschlichen Entdeckungen sollte die Entdeckung der Fehler die wichtigste sein.", Stanisław Jerzy Lec

Osterlaus
BSc Spammer
BSc Spammer
Beiträge: 1263
Registriert: 23. Aug 2007 12:46
Wohnort: DA

Re: hilfe :-( doppelte einträge aus'n vector entfernen...

Beitrag von Osterlaus »

Wenn mich nicht alles täuscht, unterstützt das Zitat aus der Doku eher Mspringers als deine Meinung, oren78...

Mspringer
Nerd
Nerd
Beiträge: 555
Registriert: 19. Okt 2006 14:41
Wohnort: Darmstadt / Alzenau
Kontaktdaten:

Re: hilfe :-( doppelte einträge aus'n vector entfernen...

Beitrag von Mspringer »

Osterlaus hat geschrieben:Wenn mich nicht alles täuscht, unterstützt das Zitat aus der Doku eher Mspringers als deine Meinung, oren78...
Tut es auch Oren ^^. Ich hab doch gesagt, ich hatte den selben Fehler am Anfang gemacht =)

Benutzeravatar
oren78
BSc Spammer
BSc Spammer
Beiträge: 1373
Registriert: 17. Nov 2006 17:47
Wohnort: Darmstadt

Re: hilfe :-( doppelte einträge aus'n vector entfernen...

Beitrag von oren78 »

war ein bissel verwirrt wegen: "subtracts" und dann das: "I+1"

bitte viiiiiiiiiiiiiiiiiiiiiielmals um vergebung werter herr kollege MSpringer :D
"Unter allen menschlichen Entdeckungen sollte die Entdeckung der Fehler die wichtigste sein.", Stanisław Jerzy Lec

Antworten

Zurück zu „Archiv“