I have this program that generates a first and last name from a file. When I run this program, I enter information in three text fields. The first two are low and high salaries (salary1.text, zary2.2.text), and the last is the number of โcopiesโ (copy.text) that I want. When I put a number in the text, such as 10 in the text box, it displays some of the same names.
The firstname file contains about 100 entries and the lastname file has about 1000 entries
Why does it generate the same name
The problem is even worse if I do something like 1000 instances .. it outputs the same thing 8 times and then does something else again 8 times
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
Example output with 10 entries
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
source share