Überprüfnung eines 2 Dimensionalen Feldes

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Überprüfnung eines 2 Dimensionalen Feldes

    Hi,

    ich hab ein Problem und komme leider ohne Hilfe nicht weiter.

    In meinem Programm werden zufällige x und y Koordinaten von Leerstellen erzeugt und in einem zweidimensionalen Feld gespeichert. Jetzt muss ich aber noch abfangen das meherer Leerstellen mit den gleichen Koordinaten erzeugt werden und ich hab keine Idee wie ich das machen soll?!?!?

    VB.NET-Quellcode

    1. Dim Pos_Leerstellen(Anz_leerstellen - 1, 1)
    2. Dim l As Integer
    3. For l = 0 To Anz_leerstellen - 1
    4. Dim Random As New Random
    5. Dim zufall_x As Integer = Random.Next(0, GridFlow_erzeugen.Box_xsize.Text)
    6. Dim zufall_y As Integer = Random.Next(0, GridFlow_erzeugen.Box_ysize.Text)
    7. Pos_Leerstellen(l, 0) = zufall_x
    8. Pos_Leerstellen(l, 1) = zufall_y
    9. Next l
    Option strict On
    Nimm ein Dictionary statt eines Feldes

    VB.NET-Quellcode

    1. Dim dc As New Dictionary(Of Double, Double)
    2. Dim x As Double = 1
    3. Dim y As Double = 2
    4. dc.Add(x, y)
    5. If (dc.ContainsKey(x)) Then
    6. ' x-Wert schon da
    7. End If
    8. If (dc.ContainsValue(y)) Then
    9. ' y-Wert schon da
    10. End If
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Chaner schrieb:

    Es dürfen ja gerne mehre x oder y Werte übereinstimmen aber halt nicht beide glecihzeitig, das ist mein Problem!
    Da geht Dictionary nicht, weil da der 1. Wert (Schlüssel) stets untereschiedlich sein muss.
    Nun, da musst Du halt die Paare einzeln abtesten.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    DAnke für eure Hilfe ich glaube ich hab eine Lösung gefunden.

    VB.NET-Quellcode

    1. Dim Pos_l(Anz_leerstellen - 1, 1) As Integer
    2. Dim l As Integer
    3. Dim frei As Boolean = True
    4. Dim f As Integer = 0
    5. For l = 0 To Anz_leerstellen - 1
    6. 'noch Ausnahme abfangen das gleiche Leerstellen erzeugt werden!
    7. Do
    8. Dim Random As New Random
    9. Dim zufall_x As Integer = Random.Next(0, GridFlow_erzeugen.Box_xsize.Text)
    10. Dim zufall_y As Integer = Random.Next(0, GridFlow_erzeugen.Box_ysize.Text)
    11. For f = 0 To l
    12. If (zufall_x = Pos_l(f, 0)) And (zufall_y = Pos_l(f, 1)) Then
    13. frei = False
    14. End If
    15. Next
    16. If frei Then
    17. Pos_l(l, 0) = zufall_x
    18. Pos_l(l, 1) = zufall_y
    19. Pos_Leerstellen = Pos_l
    20. End If
    21. Loop Until frei
    22. Next l
    warum erstellst du nicht gleich eine List(Of Point)?
    Son Point hat bereits eine x und y - Property, und Points kannste auch mitnander vergleichen, und dopplungen rauswerfen.

    Oder noch konsequenter: nimm ein Hashset(Of Point) - das ignoriertes, wenn ein Point geadded werden soll, der bereits da ist.