ArrayList-Elemente

butterfly84

Grünschnabel
Hallo,

also ich habe eine ArrayList die Elemente enthält. Jetzt möchte ich jedes Element mit einem anderen vergleichen . Geht so was? Wenn ich es in einer geschachtelten for-Schleife mache
for (int i = 0; i < segmente.size() ; i++) {

for(int j=1; j< segmente.size()-1; j++){
System.out.println(segmente.get(i).schneidetSegment(segmente.get(j)));

}
}
wie hier, dann werden fürs 1. Segment ein paar Segmente (je nach Größe) betrachtet, fürs 2. Segment die nächsten Paar usw. Ich bin für jede Hilfe sehr dankbar.
 
Hi und Willkommen bei tutorials.de :)

Du möchtest also alle möglichen Kombinationen vergleichen, nur nicht ein Element mit sich selber?

Java:
int i, J, k;
k=segmente.size();
for(i=0;i<k;i++)
{
    for(j=0;j<k:j++)
    {
        //Vergleich
    }
}

Ohne Start bei 1 und size()-1

Oder hab ich dich falsch verstanden?

Gruß
 
Zuletzt bearbeitet:
Vielen Dank erstmal :),

ich glaube ich habe es etwas ungenau erklärt.

10 2050 2645 2050 2645 2730 10 2730 10 2050

4428 2050 7063 2050 7063 2730 4428 2730 4428 2050

Also das sind 2 Zeilen aus Segment. Das sind x- und y-Koordinate die jeweils einen Punkt bilden und 2 Punkte sind ein Segment. Wenn ich jetzt deinen Code anwende dann werden die einzelnen Segmente aus einer Zeile verglichen, das ist aber gar nicht nötig. Es sollen alle Segmente aus Zeile 1 mit denen aus Zeile 2 usw Verglichen werden. Ich hoffe das Problem ist jetzt etwas klarer. :)
 
segment ist eine Arraylist vom Typ Segment und die ist so aufgebaut:

Segment (Punkt p1, Punkt p2)

sie enthält also alle Segmente für eine Polyline.
 
Ich würd ehier noch ein Schritt weitergehen und folgendes ändern:

Java:
int i, j, k;
k=segmente.size();
for(i=0;i<k-1;i++)
{
    for(j=i+1;j<k:j++)
    {
        //Vergleich
    }
}

Ich denke es ist überflüssig zu schauen, ob Segment1 Segment2 schneidet, und, ob Segment2 Segment1 schneidet. :)
 
wenn ich es auf diese Weise mache, dann überspringe ich nur ein Segment ich will aber die ganze Zeile überspringen, ich glaube das ist aber gar nicht möglich :(
 
Also ich bin mir nicht sicher aber mit zweiter Zeile meine ich Folgendes:

[((4428,2050),(7063,2050)), ((7063,2050),(7063,2730)), ((7063,2730),(4428,2730)), ((4428,2730),(4428,2050))]

weil wenn ich ArrayList ausgebe dann bekomme ich dies hier:


[((10,2050),(2645,2050)), ((2645,2050),(2645,2730)), ((2645,2730),(10,2730)), ((10,2730),(10,2050))]
[((4428,2050),(7063,2050)), ((7063,2050),(7063,2730)), ((7063,2730),(4428,2730)), ((4428,2730),(4428,2050))]
[((8846,6130),(11481,6130)), ((11481,6130),(11481,6810)), ((11481,6810),(8846,6810)), ((8846,6810),(8846,6130))]
[((8846,4090),(11481,4090)), ((11481,4090),(11481,4770)), ((11481,4770),(8846,4770)), ((8846,4770),(8846,4090))]
[((4428,10),(7063,10)), ((7063,10),(7063,690)), ((7063,690),(4428,690)), ((4428,690),(4428,10))]
[((13264,4090),(15899,4090)), ((15899,4090),(15899,4770)), ((15899,4770),(13264,4770)), ((13264,4770),(13264,4090))]
[((10,10),(2645,10)), ((2645,10),(2645,690)), ((2645,690),(10,690)), ((10,690),(10,10))]
[((8846,2050),(11481,2050)), ((11481,2050),(11481,2730)), ((11481,2730),(8846,2730)), ((8846,2730),(8846,2050))]
[((10,4090),(2645,4090)), ((2645,4090),(2645,4770)), ((2645,4770),(10,4770)), ((10,4770),(10,4090))]
[((10162,5300),(10262,5200)), ((10262,5200),(10362,5300)), ((10362,5300),(10162,5300))]
[((10161,5500),(10161,5000))]
[((3200,2425),(3100,2525)), ((3100,2525),(3200,2625)), ((3200,2625),(3200,2425))]
[((4429,2388),(2641,2388))]
[((5955,3259),(6055,3159)), ((6055,3159),(6155,3259)), ((6155,3259),(5955,3259))]
[((8848,4203),(5955,4203)), ((5955,4203),(5955,2615)), ((5955,2615),(2642,2615))]
[((8056,3315),(8156,3215)), ((8156,3215),(8256,3315)), ((8256,3315),(8056,3315))]
[((8847,4315),(8055,4315)), ((8055,4315),(8055,2614)), ((8055,2614),(7059,2615))]
[((3746,1219),(3846,1119)), ((3846,1119),(3946,1219)), ((3946,1219),(3746,1219))]
[((4430,2163),(3746,2163)), ((3746,2163),(3740,575)), ((3740,575),(2225,575))]
[((12966,4355),(13266,4655)), ((13266,4655),(12966,4955)), ((12966,4955),(12966,4355))]
[((11478,6243),(12150,6243)), ((12150,6243),(12150,4655)), ((12150,4655),(12966,4655))]
[((12966,4355),(13266,4655)), ((13266,4655),(12966,4955)), ((12966,4955),(12966,4355))]
[((11478,4429),(12150,4429)), ((12150,4429),(12150,4655)), ((12150,4655),(12966,4655))]
[((11778,2315),(11478,2615)), ((11478,2615),(11778,2915)), ((11778,2915),(11778,2315))]
[((13266,4203),(12582,4203)), ((12582,4203),(12582,2615)), ((12582,2615),(11778,2615))]
[((8548,2089),(8848,2389)), ((8848,2389),(8548,2689)), ((8548,2689),(8548,2089))]
[((7060,2389),(8548,2389))]
[((1026,3030),(1326,2730)), ((1326,2730),(1626,3030)), ((1626,3030),(1026,3030))]
[((1326,4090),(1326,3030))]
[((5744,1750),(5894,1900)), ((5894,1900),(5744,2050)), ((5744,2050),(5594,1900)), ((5594,1900),(5744,1750))]
[((5744,690),(5744,1750))]

jetzt ist hier eine Zeile eine Polyline, womit die ArrayList segmente befüllt wird, wenn es jetzt in einer geschachtelten for Schleife mache, dann wird ein Segment nicht mit allen anderen verglichen. Ich kann auch so eine Zeile (Polyline) mit einem Segment vergleichen, aber dann wird z.B.
[((4428,2050),(7063,2050)), ((7063,2050),(7063,2730)), ((7063,2730),(4428,2730)), ((4428,2730),(4428,2050))]

mit

(4428,2050),(7063,2050) und

(7063,2050),(7063,2730) unsw. verglichen aber es ja klar das es dort keine Überschneidungen geben kann.
 

Neue Beiträge

Zurück