Function Return mit Array

  • VB.NET

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

    Function Return mit Array

    Ich habe ne Function geschrieben die ZUfallswerte zurückliefert und ausgeben soll.

    VB.NET-Quellcode

    1. Public Function Zufallszahl(ByVal min As Integer, ByVal max As Integer) As Integer()
    2. Dim index As Integer = 0
    3. Dim a(max - min) As Integer
    4. For z As Integer = min To max
    5. a(index) = z
    6. index += 1
    7. Next
    8. Dim r As New Random
    9. Dim b() As Integer = (From i As Integer In a Order By r.Next).ToArray
    10. For i = 0 To max - min
    11. Return b(i)
    12. Next
    13. End Function


    Die Function rüfe ich so auf:

    VB.NET-Quellcode

    1. Sub Main()
    2. Dim e As String
    3. Do
    4. Console.Clear()
    5. Console.WriteLine(Zufallszahl(5, 10))
    6. e = Console.ReadLine()
    7. Loop While e = "n"
    8. End Sub


    Das loop ist einfach nur zu test zwecken.


    Mein Problem ist aber das diese Fehlermeldung kommt:
    Der Wert vom Typ "Integer" kann nicht in "1-dimensionales Array von Integer" konvertiert werden.

    So wie schreibe ich meine Function nun um damit das functioniert?

    Habe das auch schon so ausprobiert:

    VB.NET-Quellcode

    1. Public Function Zufallszahl(ByVal min As Integer, ByVal max As Integer) As Integer
    2. Dim index As Integer = 0
    3. Dim a(max - min) As Integer
    4. For z As Integer = min To max
    5. a(index) = z
    6. index += 1
    7. Next
    8. Dim r As New Random
    9. Dim b() As Integer = (From i As Integer In a Order By r.Next).ToArray
    10. For i = 0 To max - min
    11. Dim temp As Integer = b(i)
    12. Return temp
    13. Next
    14. End Function


    Da kommmt aber diese Meldung:
    Die Zufallszahl-Funktion gibt nicht für alle Codepfade einen Wert zurück. Fehlt eine Return-Anweisung?


    Ich will nachher einfach nur in der Console Die Zufälligen Zahlen stehen sehen die bei Zufallszahl(5,10) eingetragen sind.
    Es soll also in der Console so aussehen:

    5
    8
    10
    9
    7
    6


    Wie löse ich das Problem?

    VB.NET-Quellcode

    1. Public Function Zufallszahl(ByVal min As Integer, ByVal max As Integer) As List(Of Integer)
    2. Dim Zahlen As New List(Of Integer)
    3. Dim index As Integer = 0
    4. Dim a(max - min) As Integer
    5. For z As Integer = min To max
    6. a(index) = z
    7. index += 1
    8. Next
    9. Dim r As New Random
    10. Dim b() As Integer = (From i As Integer In a Order By r.Next).ToArray
    11. For i = 0 To max - min
    12. Zahlen.Add(b(i))
    13. Next
    14. Return Zahlen
    15. End Function



    Aufrufbeispiel:

    VB.NET-Quellcode

    1. Sub Main()
    2. For Each z As Integer In Zufallszahl(10, 20)
    3. Console.WriteLine(z)
    4. Next
    5. Console.ReadLine()
    6. End Sub

    trex0113 schrieb:

    ah ok, mit ner list hab das noch gar nicht probiert...

    Aber geht mein Code überhaupt so? Also hab ich irgend ein Denkfehler drin? Oder ist das nur mit ner List umsetzbar?

    Ich weiss ja nicht genau, wie dein Vorhaben ist bzw. wie/wofür Du diese Zufallszahlen nutzen möchtest.
    Allerdings ist der Code ziemlich "um die Ecke gedacht" programmiert und auch nicht von Dir.

    trex0113 schrieb:

    Die Zufälligen Zahlen stehen sehen die bei Zufallszahl(5,10) eingetragen sind.

    btw: Wsssss?

    Du willst die Zahlen von 5-10 in zufälliger Reihenfolge ausgeben?

    VB.NET-Quellcode

    1. Dim r As New Random
    2. Array.ForEach((From p In Enumerable.Range(5, 6) Order By r.Next Select CStr(p)).ToArray, AddressOf Console.WriteLine)
    aah jetzt funktioniert, Sowohl mit der List als auch die Idee von Picoflop

    So siehts jetzt aus:

    VB.NET-Quellcode

    1. Public Function Zufallszahl(ByVal min As Integer, ByVal max As Integer) As Integer()
    2. Dim index As Integer = 0
    3. Dim a(max - min) As Integer
    4. For z As Integer = min To max
    5. a(index) = z
    6. index += 1
    7. Next
    8. Dim r As New Random
    9. Dim b() As Integer = (From i As Integer In a Order By r.Next).ToArray
    10. Return b
    11. End Function


    pS: Warum soll der Code nicht von mir sein? Ich gebe zu das ich das mit dem Ordnen der Zufallszahlen von Picoflops Code in einem anderen Thema genommen habe und etwas damit rumexperiementiert habe, weil ich den nicht so ganz verstanden habe was das macht (bin Anfänger). Hab Also mal ein paar Befehle weggelassen und so weiter. Nunja so ganz verstehe ich das immer noch nicht und msdn hift mir da auch nicht so ganz weiter wenn ich die einzelnen Befehle so anschaue... aber eird shcon noch :)

    Was ich damit genau machen will?
    Nun ja, weiß ich selber nicht genau, sagen wir mal einfach zum Üben.
    Aber das mit dem Array und so hab ich selbst hinbekommen :)