Code:
Option Explicit
Public Sub arraytest()
Dim arraytest() As Integer
Dim strDurchlaeufe As String
Dim intDurchlaeufe As Integer
Dim b As Integer
strDurchlaeufe = InputBox("Wie oft soll die Schleife wiederholt werden?: ", "")
intDurchlaeufe = CInt(strDurchlaeufe) 'String to Integer
ReDim arraytest(intDurchlaeufe) As Integer 'intDurhlaeufe in Variabel arraytest definieren
Dim max, min
max = InputBox("Geben Sie hier Ihre gewünschte Maximumzahl ein", "")
min = 1
Randomize
For b = intDurchlaeufe To 1 Step -1 'wiederholt so oft wie die Zahl in IntDurchlaeufe
intDurchlaeufe = CInt(Int((max - min + 1) * Rnd + min)) 'CInt = Umwandeln
MsgBox intDurchlaeufe & " ist die Zahl in folgendem arrayTest(" & intDurchlaeufe & ")"
Next b
End Sub
Hat gefuntzt ^^
Danke
Greez C@N
Sieht eigentlich ganz ok aus und wird sicher funktionieren. Ein paar Bemerkungen habe ich aber noch:
- Bitte sei dir bewusst, dass dies funktioniert ,aber nur zum Testen der Funktionalität geeignet ist. In der Praxis müsste unbedingt noch ein Error-Handling rein -> so bekommst du eine üble Meldung wenn du z.B. einen Buchstaben statt einer Zahl eingibst. Im Minimum würde ich gleich nach "Option Explicit" ein "On Error Resume Next" setzen. Der Benutzer bekommt so zumindest keine Debugmeldung, wobei dies das absolute Minimum an Fehlerbehandlung darstellt.
- Was ich selber nicht gerne sehe ist, wenn man mitten im Code erneut Variabeln deklariert (= unübersichtlich) z.B. max und min hier:
Code:
ReDim arraytest(intDurchlaeufe) As Integer 'intDurhlaeufe in Variabel arraytest definieren
Dim max, min
max = InputBox("Geben Sie hier Ihre gewünschte Maximumzahl ein", "")
zudem fehlt hier eine Variablendeklaration d.h. hier wird für max und min ein Typ Variant definiert. Dies ist völlig unnötig und führt zu mehr Speichergebrauch. Ach ja, da "min" fix ist, kann man den Wert als Konstante definieren bzw. gleich weglassen, da "min" fix ist und du es unten nur noch einmal benötigst.
- Kommentare sind wichtig, trotzdem sollte man sparsam damit umgehen und nicht kommentieren, was man als erfahrener Programmierer sowie gleich vom Schiff aus sieht z.B.
und
Code:
'intDurhlaeufe in Variabel arraytest definieren
der letzte Kommentar ist sogar falsch. Du definierst hier keine Variable in "arraytest", sondern du definierst die Grösse des Arrays von "arrytest"!
Im übrigen hätte ich für den folgenden Block einen Kommentar besser verständlichen Kommentar erwartet, da man hier genauer hinsehen muss, um zu verstehen was passiert:
Code:
For b = intDurchlaeufe To 1 Step -1 'wiederholt so oft wie die Zahl in IntDurchlaeufe
intDurchlaeufe = CInt(Int((max - min + 1) * Rnd + min)) 'CInt = Umwandeln
MsgBox intDurchlaeufe & " ist die Zahl in folgendem arrayTest(" & intDurchlaeufe & ")"
Next b
Wobei ich:
Code:
intDurchlaeufe = CInt(Int((max - min + 1) * Rnd + min))
eh nicht ganz verstehe. "min" wurde mit dem Wert "1" gefüllt und dann ziehst du durch (...)(max - min + 1) (...) "1"von max ab, um wieder "1" zu addieren
Dies macht nur Sinn, wenn du eine Variable Untergrenze hast d.h. "min" nicht fix "1" wäre, sondern Variabel. Da kann man also ziemlich kürzen:
Code:
intDurchlaeufe = Int((max) * Rnd + 1)
Bei mir würde das etwa so aussehen:
Code:
Option Explicit
On Error Resume Next
Public Sub arraytest()
'Funktion: Beispiel wie die Grösse eines Arrays zur Laufzeit gesetzt werden kann
'Autor: Xpert et. al.
'Datum: 04. Juni 2012
'Version: 1.00
Dim arraytest() As Integer
Dim intDurchlaeufe, b, max As Integer
Dim strDurchlaeufe As String
strDurchlaeufe = InputBox("Wie oft soll die Schleife wiederholt werden?: ", "")
intDurchlaeufe = CInt(strDurchlaeufe)
ReDim arraytest(intDurchlaeufe) As Integer
max = CInt(InputBox("Geben Sie hier Ihre gewünschte Maximumzahl ein", ""))
Randomize
For b = intDurchlaeufe To 1 Step -1
intDurchlaeufe = Int((max) * Rnd + 1)'ganzzahlige Zufallszahl innerhalb des Bereichs 1 bis "max" erzeugen
MsgBox intDurchlaeufe & " ist die Zahl in folgendem arrayTest(" & intDurchlaeufe & ")"
Next b
End Sub