chapter 7 - vb.net by schneider1 chapter 7 – arrays 7.1 creating and accessing arrays 7.2 using...
DESCRIPTION
Chapter 7 - VB.Net by Schneider3 Simple variables A variable (or simple variable) is a name to which VB.NET can assign a single value. An array variable is a collection of simple variables of the same type to which VB.NET can efficiently assign a list of values.TRANSCRIPT
Chapter 7 - VB.Net by Schneider 1
Chapter 7 – Arrays7.1 Creating and Accessing Arrays7.2 Using Arrays7.3 Control Arrays
Skip Structures (7.3), 7.4 and 7.5
Chapter 7 - VB.Net by Schneider 2
7.1 Creating and Accessing Arrays
• Array Creation• ReDim Statement• Using an Array as a Frequency Table
Chapter 7 - VB.Net by Schneider 3
Simple variables• A variable (or simple variable) is a
name to which VB.NET can assign a single value.
• An array variable is a collection of simple variables of the same type to which VB.NET can efficiently assign a list of values.
Chapter 7 - VB.Net by Schneider 4
Elements of an Array• Array Name: A valid variable name for
the structure.• Subscript or Index : A value that refers to
a particular array element.• Element: An individual data item within
an array.
Chapter 7 - VB.Net by Schneider 5
Example• Suppose that you want to evaluate the exam
grades for 30 students and to display the names of the students whose scores are above average.
Private Sub btnDisplay_Click(...) Handles btnDisplay.Click
Dim student1 As String, score1 As DoubleDim student2 As String, score2 As DoubleDim student3 As String, score3 As Double
Chapter 7 - VB.Net by Schneider 6
Using Arrays
Dim student(30) As StringDim score(30) As Double
Array name
Upper bound of subscriptsin the array
Data type
Chapter 7 - VB.Net by Schneider 7
Putting Values into an Arraystudent(1) = "Tom Brown"
subscript
Read: "student sub one equals Tom Brown"Which means that the string "Tom Brown" is being
stored at the second location in the array called student… because all arrays begin counting at 0.
Chapter 7 - VB.Net by Schneider 8
Array Terminology• Dim arrayName(n) As DataType• 0 is the "lower bound" of the array• n is the "upper bound" of the array – the
last available subscript in this array• The number of elements is the size of
the array
Chapter 7 - VB.Net by Schneider 9
Variable Arrays• Can have one or two dimensions• A one-dimensional array is simply a row
(or column) of variables• Each element in an array is identified by
a subscript• You refer to an array element by the
array’s name followed by the element’s subscript
Chapter 7 - VB.Net by Schneider 10
One-dimensional Array
Nebraska New Jersey New Mexico Tennessee Texas
NebraskaNew JerseyNew MexicoTennesseeTexas
Demo Provinces
Chapter 7 - VB.Net by Schneider 11
Example 1Private Sub btnWhoWon_Click(...) _ Handles btnWhoWon.Click Dim teamName(4) As String Dim n As Integer 'Place Super Bowl Winners into the array teamName(1) = "Packers" teamName(2) = "Packers" teamName(3) = "Jets" teamName(4) = "Chiefs" 'Access array n = CInt(txtNumber.Text) txtWinner.Text = teamName(n)End Sub
Chapter 7 - VB.Net by Schneider 12
Output Example 1
Chapter 7 - VB.Net by Schneider 13
Example 2Dim teamName(3) As StringPrivate Sub btnWhoWon_Click(...)Handles btnWhoWon.Click Dim n As Integer n = CInt(txtNumber.Text) txtWinner.Text = teamName(n)End Sub
Private Sub Form1_Load(...) Handles MyBase.Load 'Place Super Bowl Winners into the array teamName(1) = "Packers" teamName(2) = "Packers" teamName(3) = "Jets"End Sub
Chapter 7 - VB.Net by Schneider 14
Initializing Arrays• Arrays may be initialized when they are created:Dim arrayName() As varType = {value0, _ value1, value2, ..., valueN}• declares an array having upper bound N and
assigns value0 to arrayName(0), value1 to arrayName(1), value2 to arrayName(2), ..., and valueN to arrayName(N).
Dim teamName() As String = {"", "Packers", _ "Packers", "Jets", "Chiefs"}
Chapter 7 - VB.Net by Schneider 15
Initializing an Array by Reading from a File
Dim student (30) As String, count as integerDim sr as IO.streamreader = IO.File.OpenText …Open “STUDENTS.TXT” For Input As #1For count = 1 To 30 student ( count ) = sr.readlineNextsr.close
Demo Provinces2
Chapter 7 - VB.Net by Schneider 16
Parallel Arrays
• Two arrays are referred to as parallel if subscripted variables having the same subscript (elements) are related.
• i.e. student(30) and grade(30)
Chapter 7 - VB.Net by Schneider 17
The Average Program Revisited!For count = 1 To 30 student (count) = sr.readline grade (count) = Cdbl(sr.readline)Nextsum = 0For count = 1 To 30 sum += grade(count)Nextaverage = sum/30
Chapter 7 - VB.Net by Schneider 18
Unknown Array Size
• What do I do if I don’t know the size of a file – and thus the size of the array??
Chapter 7 - VB.Net by Schneider 19
First Technique – Unknown Size• Dim Array with no upper bound • Use a loop and counter to count the
number of items in the file• ReDim the array based on the counter• Use a second loop to then read the
known file size
Chapter 7 - VB.Net by Schneider 20
Second Technique – Unknown Size
• Dim Array with a large upper bound• Use a loop and sr.peek to see if
additional data exists in the file• Use ReDim Preserve to increase the
upper bound of the array by one• Read one piece of data into the new
array element just created
Chapter 7 - VB.Net by Schneider 21
Third Technique – Unknown Size• Dim an Array with a large upper bound
(large enough to easily hold all data)• Read from the file into the array using a
loop with a counter• Keep track of the number of pieces of
data in the array with the counter• So in effect, you only use part of a large
array
Chapter 7 - VB.Net by Schneider 22
ReDim Statement• The size of an array may be changed
after it is created:ReDim arrayName(m)• where arrayName is the name of the
already declared array and m is an Integer literal,variable, or expression.
Chapter 7 - VB.Net by Schneider 23
Preserve• To keep any data that has already been
stored in the array when resizing it, useReDim Preserve arrayName(m)
•Demo Provinces3
Chapter 7 - VB.Net by Schneider 24
Using an Array as a Frequency Table
Private Sub btnAnalyze_Click(...) Handles btnAnalyze.Click'Count occurrences of the various letters in a sentence Dim index, letterNum As Integer Dim sentence, letter As String Dim charCount(26) As Integer 'Examine and tally each letter of the sentence sentence = (txtSentence.Text).ToUpper For letterNum = 1 To sentence.Length letter = sentence.Substring(letterNum - 1, 1) If (letter >= "A") And (letter <= "Z") Then index = Asc(letter) - 64 'The ANSI value of "A" is 65 charCount(index) += 1 End If Next
Chapter 7 - VB.Net by Schneider 25
Example 4 continued 'List the tally for each letter of alphabet lstCount.Items.Clear() For index = 1 To 26 letter = Chr(index + 64) If charCount(index) > 0 Then lstCount.Items.Add(letter & " " & _ charCount(index)) End If NextEnd Sub
Chapter 7 - VB.Net by Schneider 26
Example 4 Output
Chapter 7 - VB.Net by Schneider 27
Out of Bounds Error• The following sets up an array, and then references an
element that doesn't exist. This will cause an error.Dim trees() As String = {"", "Sequoia", _ "Redwood", "Spruce"}txtBox.Text = trees(5)
Chapter 7 - VB.Net by Schneider 28
Copying Arrays• If arrayOne() and arrayTwo() have been
declared with the same data type, then the statement
arrayOne = arrayTwo• makes arrayOne() an exact duplicate of
arrayTwo(). It will have the same size and contain the same information.
Chapter 7 - VB.Net by Schneider 29
Exercises p. 312In-class P. 319, #36
Chapter 7 - VB.Net by Schneider 30
7.2 Using Arrays• Ordered Arrays • Using Part of an Array• Merging Two Ordered Arrays • Passing Arrays to Procedures
Chapter 7 - VB.Net by Schneider 31
Ordered Arrays• An array is ordered if the elements are in
ascending or descending order.
• Why would we want to order an array??
Chapter 7 - VB.Net by Schneider 32
Ordered Arrays - Example 1Dim nom() As String = {"", "AL", "BOB", "CARL", "DON","ERIC", _ "FRED", "GREG", "HERB", "IRA", "JACK"}
Private Sub btnSearch_Click(...) Handles btnSearch.Click Dim name, name2Find As String Dim n As Integer 'Subscript of the array name2Find = txtName.Text.ToUpper Do n += 1 'Add 1 to n Loop Until (nom(n) >= name2Find) Or (n = 10) If nom(n) = name2Find Then txtResult.Text = "Found." Else txtResult.Text = "Not found." End IfEnd Sub
Chapter 7 - VB.Net by Schneider 33
Ordered Arrays• Answer – It makes searching them much
more efficient
• On average, you only have to search half an array that is ordered whereas you have to search the whole array if unordered
Chapter 7 - VB.Net by Schneider 34
Merging Two Ordered Arrays• To consolidate two lists into a single ordered list:1. Compare the two names (numbers) at the top of the first
and second lists.a) If one name (number) precedes the other, copy it onto
the third list and cross it off its original list.b) If the names (numbers) are the same, copy the name
(number) onto the third list and cross out the name (number) from the first and second lists.
2. Repeat Step 1 with the current top names (numbers) until you reach the end of either list.
3. Copy the names from the remaining list onto the third list.
•Demo 7-2-3 modified
Chapter 7 - VB.Net by Schneider 35
Passing Arrays to Procedures• An array declared in a procedure is local
to that procedure• An entire array can be passed to a Sub
or Function procedure
Chapter 7 - VB.Net by Schneider 36
Example 4Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim score() As Integer = {0, 85, 92, 75, 68, 84, 86, _ 94, 74, 79, 88} txtAverage.Text = CStr(Sum(score) / 10)End Sub
Function Sum(ByVal s() As Integer) As Integer Dim total, index As Integer total = 0 For index = 1 To s.GetUpperBound(0) 'The upper bound is 10 total += s(index) Next Return totalEnd Function
Chapter 7 - VB.Net by Schneider 37
Comments• Searching successive elements of an
ordered list beginning with the first element is called a sequential search.
Chapter 7 - VB.Net by Schneider 38
Passing an Array Element• A single element of an array can be passed to a
procedure just like any ordinary numeric or string variable.
Private Sub btnDisplay_Click(...) Handles btnDisplay.Click
Dim num(20) As Integer num(5) = 10 lstOutput.Items.Add(Triple(num(5)))End SubPrivate Function Triple(ByVal x As Integer) As Integer Return 3 * xEnd Function
Chapter 7 - VB.Net by Schneider 39
7.3 Some Additional Types of Arrays
• Control Arrays• Array of Structures (OMIT)
Chapter 7 - VB.Net by Schneider 40
Control Arrays• Control arrays are arrays of controls, such
as labels, text boxes, etc.• They are created in much the same way as
any other array:Dim arrayName(n) As ControlType• orDim arrayName() As ControlType
Chapter 7 - VB.Net by Schneider 41
Control Arrays continued• The following statements declare control
arrays.Dim lblTitle(10) As LabelDim txtNumber(8) As TextBoxDim btnAmount() As Button
•Demo 7-3-1modified
Chapter 7 - VB.Net by Schneider 42
Example 1Dim lblDept(5) As LabelDim txtDept(5) As TextBoxPrivate Sub Form1_Load(...) Handles MyBase.Load Dim depNum As Integer lblDept(1) = Label1 lblDept(2) = Label2 lblDept(3) = Label3 lblDept(4) = Label4 lblDept(5) = Label5 txtDept(1) = TextBox1 txtDept(2) = TextBox2 txtDept(3) = TextBox3 txtDept(4) = TextBox4 txtDept(5) = TextBox5
Array of controls
Placing controlsInto arrays
Chapter 7 - VB.Net by Schneider 43
Example 1 continued For depNum = 1 To 5 lblDept(depNum).Text = "Department " & depNum txtDept(depNum).Clear() NextEnd SubPrivate Sub btnCompute_Click(...) Handles btnCompute.Click Dim totalSales As Double = 0 Dim depNum As Integer For depNum = 1 To 5 totalSales += CDbl(txtDept(depNum).Text) Next txtTotal.Text = FormatCurrency(totalSales)End Sub
Chapter 7 - VB.Net by Schneider 44
Example 1 Output
Chapter 7 - VB.Net by Schneider 45
• Exercises p. 345
Chapter 7 - VB.Net by Schneider 46
ListBoxes• Adding to a listbox
• Listboxes as arrays
• Events associated with listboxes
Chapter 7 - VB.Net by Schneider 47
Useful Properties of the List Box
• Items can be placed into a listbox at design time or runtime• lstBox.items.add(‘item1”)• lstBox.items.add(“item2”)
• This forms an array with 2 elements• For the index number of the currently
highlighted item:lstBox.SelectedIndex
Chapter 7 - VB.Net by Schneider 48
More List Box Properties• lstBox.Items() is the list of items in the list box.
The value of the item with an index of "n" is:lstBox.Items(n)• The data type of the elements in the lstBox.Items()
array is Object. To put the first element of lstBox.Items in a text box:
txtBox.Text = CStr(lstBox.Items(0))
Chapter 7 - VB.Net by Schneider 49
Currently Highlighted Item in a List Boxes
The currently highlighted item can be obtained by:
lstBox.Items(lstBox.SelectedIndex)OrlstBox.TextOrlstBox.SelectedItem
Chapter 7 - VB.Net by Schneider 50
List Box Events• Three main types of events with list boxes:• Click – if the user clicks on an item in the list
box• SelectedIndexChanged – (default event) if the
user clicks on an item or uses the arrow keys to select it
• DoubleClick - if the user double-clicks on an item
Demo - Movies
Chapter 7 - VB.Net by Schneider 51
The Random Class• A random number generator declared
with the statement:Dim randomNum As New Random()• If m and n are whole numbers and m < n
then the following generates a whole number between m and n (including m, but excluding n)
randomNum.Next(m, n)Demo – Random