Generatore di numeri casuali Vb.net che genera lo stesso numero molte volte

Ho questo programma che genera un nome e un cognome da un file. Quando eseguo questo programma inserisco le informazioni in tre caselle di testo. I primi due sono lo stipendio basso e alto (salary1.text, salary2.text) e l’ultimo è il numero di “copie” (copy.text) che voglio .. Quando inserisco un numero come 10 nel testo box mostra alcuni degli stessi nomi.

Il file firstname ha circa 100 record e il file lastname ha circa 1000 record

Perché sta generando lo stesso nome

Il problema è ancora peggio se faccio qualcosa come 1000 copie .. emette la stessa cosa 8 volte e poi fa qualcosa di diverso altre 8 volte

Public Class Form1 Dim sex As String Function randomfirstname() Dim infile As IO.StreamReader Dim infile1 As IO.StreamReader Dim male() As String Dim female() As String Dim name As String Dim n As Integer = 0 Dim fun As New System.Random Dim maleorfemale As New Random() Dim RandomNumber As Integer Dim index As Integer RandomNumber = maleorfemale.Next(0, 55984) infile = IO.File.OpenText("boysnames.txt") infile1 = IO.File.OpenText("girlsnames.txt") If RandomNumber Mod 2 = 0 Then While infile.Peek  -1 ReDim Preserve male(n) male(n) = infile.ReadLine n = n + 1 End While n = n - 1 index = fun.Next(0, n) name = male(index) sex = "M" n = 0 Return name Else While infile1.Peek  -1 ReDim Preserve female(n) female(n) = infile1.ReadLine n = n + 1 End While n = n - 1 index = fun.Next(0, n) name = female(index) sex = "F" Return name n = 0 End If End Function Function randomlastname() Dim infile2 As IO.StreamReader Dim lname() As String Dim lastname As String Dim n As Integer = 0 Dim index As Integer Dim fun As New System.Random infile2 = IO.File.OpenText("lastname.txt") While infile2.Peek  -1 ReDim Preserve lname(n) lname(n) = infile2.ReadLine n = n + 1 End While n = n - 1 index = fun.Next(0, n) lastname = lname(index) Return lastname End Function Function salary() Dim salary01 As Double Dim salary02 As Double Dim salary03 As Double salary01 = CDbl(salary1.Text) salary02 = CDbl(salary2.Text) Dim sal As New System.Random salary03 = System.Math.Round(sal.NextDouble() * (salary02 - salary01) + salary01, 2) Return salary03 End Function Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'ListBox1.Items.Add(randomfirstname() & vbTab & randomlastname() & vbTab & sex & vbTab & salary()) Dim outfile As New System.IO.StreamWriter("C:\Users\Johnathon\Desktop\486assign1.txt") Dim i As Integer = 0 outfile.Write("Firstname" & vbTab & "LastName" & vbTab & "Sex" & vbTab & "Salary" & vbCrLf) outfile.Write("-----------------------------------------------------------------------------" & vbCrLf) For i = 1 To CInt(copies.Text) outfile.Write(randomfirstname() & vbTab & randomlastname() & vbTab & sex & vbTab & salary() & vbCrLf) ListBox1.Items.Add(randomfirstname() & vbTab & randomlastname() & vbTab & sex & vbTab & salary()) Next outfile.Close() End Sub End Class 

Uscita di esempio con 10 record

 Firstname LastName Sex Salary ----------------------------------------------------------------------------- Carson Gillespie M 8.46 Carson Gillespie M 8.46 Carson Gillespie M 8.46 Samantha Daniels F 5.84 Samantha Daniels F 5.84 Samantha Daniels F 5.84 Natalia Guthrie F 9.26 Natalia Guthrie F 9.26 Natalia Guthrie F 9.26 Natalia Guthrie F 6.64