kaiserqq7
Goto Top

C sharp - einen Element aus liste 1 in liste 2 finden

Hallo,

ich habe folgende Code

public static void finden()
{

for (int i = 0; i < list_1.Count(); i++)
{


for (int j = 0; j < list_2.Count(); j++)
{
if (list_1[i] == list_2[j]) MessageBox.Show(list_1[i] );
}
}
}


die beide listen sind shon defeniert und haben auch Elemente.(habe ich sie in dieser stelle auch mit MessageBox.Show überprüft)
und das Problem ist es, dass nur der erste Element gefunden wird. Den Rest kann die If-Anweisung nicht treffen??
hat jemand eine Idee??

Gruß

Content-Key: 171921

Url: https://administrator.de/contentid/171921

Printed on: April 19, 2024 at 23:04 o'clock

Member: noxcry
noxcry Aug 23, 2011 at 11:45:59 (UTC)
Goto Top
Zitat von @KaiserQQ7:
Hallo,

ich habe folgende Code

public static void finden()
{

for (int i = 0; i < list_1.Count(); i++)
{


for (int j = 0; j < list_2.Count(); j++)
{
if (list_1[i] == list_2[j]) MessageBox.Show(list_1[i] );
}
}
}


die beide listen sind shon defeniert und haben auch Elemente.(habe ich sie in dieser stelle auch mit MessageBox.Show
überprüft)
und das Problem ist es, dass nur der erste Element gefunden wird. Den Rest kann die If-Anweisung nicht treffen??
hat jemand eine Idee??

Gruß

Das klingt für mich so, als ob in list_2 nur ein Element vorhanden ist.
Weil wenn nur ein Element drinnen ist dann verlässt er die zweite for-Schleife nach dem ersten Element wieder.
lg
Member: KaiserQQ7
KaiserQQ7 Aug 23, 2011 at 12:04:42 (UTC)
Goto Top
aber wenn ich diese Liste in MessageBox.Show + schleife rein tue dann bekommen alle Elemente ..
Member: noxcry
noxcry Aug 23, 2011 at 12:24:12 (UTC)
Goto Top
willst du, dass wenn das if true ist, dass er bei liste_1 ein element weiter geht?
oder nicht?

weil:

wenn du die schleifen verschachtelst, dann bleibt er beim ersten vor mit i auf 0 und läuft aber beim 2. for alle elemente von liste_2 durch....
wenn du das halt meinst mit dem ersten element....
Member: KaiserQQ7
KaiserQQ7 Aug 23, 2011 at 12:37:34 (UTC)
Goto Top
ja das wollte ich

ich habe das so erweitert mit "break" wenn if true ist aber ohne ERfolg:

public static void finden()
{
for (int i = 0; i < list_1.Count(); i++)
{
for (int j = 0; j < list_2.Count(); j++)
{
if (list_1[i] == list_2[j])
{
MessageBox.Show(list_1[i] );
break;
}
}
}
}
Member: noxcry
noxcry Aug 23, 2011 at 12:41:25 (UTC)
Goto Top
und wenn einfach keine elemente mehr in list_1 sind die mit list_2 übereinstimmten??
lg
Member: KaiserQQ7
KaiserQQ7 Aug 23, 2011 at 12:43:35 (UTC)
Goto Top
list_1 ist ein Teilmenge von liste_2. also muss ein Ergebniss liefern sonst ERR.

lg
Member: KaiserQQ7
KaiserQQ7 Aug 23, 2011 at 12:49:02 (UTC)
Goto Top
Zitat von @noxcry:
willst du, dass wenn das if true ist, dass er bei liste_1 ein element weiter geht?
oder nicht?

weil:

wenn du die schleifen verschachtelst, dann bleibt er beim ersten vor mit i auf 0 und läuft aber beim 2. for alle elemente von
liste_2 durch....
wenn du das halt meinst mit dem ersten element....


was kann ich tun um ich zu den nächsten element zu kommen also list_1[i]
hast eine andere alternative statt break; ??
Mitglied: 64748
64748 Aug 23, 2011 at 12:49:46 (UTC)
Goto Top
Hallo zusammen,

mir fällt hier eines auf, Du musst bei der Fehlersuche unterscheiden, entweder werden die Schleifen nicht richtig durchlaufen, oder die if-Anweisung funktioniert nicht.

Den ersten Fall testest Du indem Du anstatt der if-anweisung die Werte für i und j ausgeben lässt. Da sollten dann Zahlenpaare der Form (0,0),(0,1),(0,3)....(n,m) rauskommen.

Den zweiten Fall, also das Funktionieren der if-Anweisung test Du mit einem Fall, der auf jeden Fall wahr ist. Du lässt uns im unklaren, welchen Datentyp die Listenelemente haben, von daher ist es schwer zu durchschauen. Allerdings wird die if-Anweisung bei selbstdefinierten Datentypen u.U. nicht funktionieren.

Markus
Member: KaiserQQ7
KaiserQQ7 Aug 23, 2011 at 12:54:31 (UTC)
Goto Top
welchen Datentyp die Listenelemente haben,

static List<string> list_1 = new List<string>();
static List<string> list_2 = new List<string>();
Mitglied: 64748
64748 Aug 23, 2011 at 12:59:49 (UTC)
Goto Top
Ich kenne C# nicht, wohl aber C und C++, bei beiden kann man Strings nicht mit == vergleichen, sondern mit strcmp. Bei C++ geht's dann wenn man den == Operator überlädt.

Markus
Member: noxcry
noxcry Aug 23, 2011 at 13:08:04 (UTC)
Goto Top
doch in c# kann man strings direkt vergleichen...
Member: KaiserQQ7
KaiserQQ7 Aug 23, 2011 at 13:10:21 (UTC)
Goto Top
also das geht aber ich bleibe nur bei dem ersten element ich weiß nicht wie ich weiter gehe.
Member: noxcry
noxcry Aug 23, 2011 at 13:11:33 (UTC)
Goto Top
also, wenn du in der zweiten schleife ein break nach dem if verwendest (falls du überhaupt ins if kommst, weil wie gesagt ist die frage, ob da noch identische elemente sind...), dann bricht er die aktuelle schleife ab und geht wieder in die erste und erhöht i um 1....
Mitglied: 64748
64748 Aug 23, 2011 at 13:11:56 (UTC)
Goto Top
Hast Du denn nun getestet, ob die Schleifen korrekt durchlaufen werden?

Markus
Member: noxcry
noxcry Aug 23, 2011 at 13:13:00 (UTC)
Goto Top
eben, es ist die frage wie viele elemente sich in beiden listen befinden....
Member: KaiserQQ7
KaiserQQ7 Aug 23, 2011 at 13:19:23 (UTC)
Goto Top
Zitat von @noxcry:
eben, es ist die frage wie viele elemente sich in beiden listen befinden....


list_1 => 12
list_2 => 90
Member: noxcry
noxcry Aug 23, 2011 at 13:28:02 (UTC)
Goto Top
hast du mal händisch mittels breakpoint geschaut, ob da noch gleiche elemente drinnen sind?
Mitglied: 64748
64748 Aug 23, 2011 at 13:29:03 (UTC)
Goto Top
@KaiserQQ7, wenn Du möchtest, dass Dir hier jemand hilft, den Fehler in Deinem Programm zu finden, dann poste bitte vollständige Sätze mit Deinen Gedankengängen zur Lösung des Problems. Mit Deinen Stichwortsammlungen kann hier keiner was anfangen.

Markus
Member: noxcry
noxcry Aug 23, 2011 at 13:30:08 (UTC)
Goto Top
Zitat von @64748:
@KaiserQQ7, wenn Du möchtest, dass Dir hier jemand hilft, den Fehler in Deinem Programm zu finden, dann poste bitte
vollständige Sätze mit Deinen Gedankengängen zur Lösung des Problems. Mit Deinen Stichwortsammlungen kann hier
keiner was anfangen.

Markus

da muss ich dir zustimmen, es was sehr schwer zu erkennen, was du wolltest...
Member: KaiserQQ7
KaiserQQ7 Aug 23, 2011 at 13:57:11 (UTC)
Goto Top
ich habe jetzt die beide listen gleich gemacht und ich habe herausgefunden dass alle elemente außer der ersten mit minus Zeichen in der zeite Liste kommt (ich habe die längere geschaut). ich schaue mal nach wo das herkommt villt ist das eine Leerzeichen.