Gå til innhold

random number generator. feilmelding


Anbefalte innlegg

Hei holder nå på med en tallgenerator, men skjønner ikke helt hva problemet er. Hvis jeg har f.eks 9 i text1 og 1000 i text2, dukker det opp msgbox som vist i koden. msgboxen skal bare komme hvis du f.eks har 1000 i text1 og 9 i text2

 

Text1 = minste tall

Text2 = meste tall

Text3 = Resultat

cmdRandom = generer nummer

cmdclear = tilbakestill

cmdavslutt = avslutt

 

Option Explicit
DefLng A-Z

Private Sub cmdavslutt_Click()
End
End Sub

Private Sub cmdclear_Click()
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
End Sub

Private Sub Form_Load()
 Randomize
End Sub

Private Sub cmdRandom_Click()
 If Text2.Text > Text1.Text Then
 Text3.Text = Format(RandomNumBetween(Text1.Text, Text2.Text))
 Else
 MsgBox "Minimum skal være mindre enn Maximum.", , "Feil"
 End If
End Sub


Private Function RandomNumBetween(ByVal LowerLimit As Long, ByVal UpperLimit As Long) As Long
 RandomNumBetween = Rnd * (UpperLimit - LowerLimit) + LowerLimit
End Function

Endret av Legendarynilsen
Lenke til kommentar
Videoannonse
Annonse

OK, her er det flere feil

 

Først og fremst, kan ikke tekster sammenlignes på denne måte, gjør det om til nummer først.

Int.Parse, eller CInt()

 

Deretter kan du bruke Random klassen til å generere et tilfeldig tall, framfor Rnd funksjonen.

 

Bruk også variabler for å holde på verdiene istedet får å bruke TextBox.Text feltet.

Lenke til kommentar

GeirGrusom: Dette er VB6, om jeg ikke tar feil. I VB.NET ville en sett Handles-nøkkelordet etter hendelsesprosedyrene, samt form-klassen og kompilatorfeil ved DefLng. Rnd er derfor riktig, ettersom VB6-runtimen ikke inneholder noen Random-klasse.

 

Nåvel, feilen kan en, som GeirGrusom ganske riktig påpeker, rette ved å bruke tallsammenlikning:

If CLng(Text2.Text) > CLng(Text1.Text) Then

Når VB sammenlikner strenger, ignoreres lengden/posisjonen på karakterene (selv når en sammenlikner for likhet, idiotisk nok), slik at den i dette tilfellet avgjør at streng B er større fordi "9" > "1".

Endret av aadnk
Lenke til kommentar

Siden man allikevel sjekker hvilket tall som er minst, ville jeg nok heller sendt dem til funksjonen i korrigert rekkefølge enn å fortelle brukeren hvor dum han er:

 

If x > y Then

Text3.Text = RandomNumBetween(y, x)

Else

Text3.Text = RandomNumBetween(x, y)

End If

 

Programmer som klager på input blir mislikt utrolig fort.

 

Beste hilsen Harald

Lenke til kommentar

Ofte synes jeg det kan være hendig å bare gjøre teksten rød hvis det er feil i input, eller en annen grafisk framvisning av feilen.

Faktisk vil si at msgbox er fy, utenom debug sammenhenger, og der man umiddelbart trenger et svar fra brukeren.

utenom det, finnes det mer elegante løsninger, som ikke irriterer brukeren i det lange løp.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...