0% found this document useful (0 votes)
14 views

Ch07

Uploaded by

Melat Landuber
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
14 views

Ch07

Uploaded by

Melat Landuber
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 97

Chapter 7 – Arrays

7.1 Creating and Using Arrays


7.2 Using LINQ with Arrays
7.3 Arrays of Structures
7.4 Two-Dimensional Arrays

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 1
7.1 Creating and Using Arrays
• Declaring an Array Variable
• The Load Event Procedure
• Implicit Array Sizing and Initialization
• Text Files
• Array Methods
• Calculating an Array Value with a Loop
• The ReDim Statement
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 2
7.1 Creating and Accessing
Arrays (continued)
• For Each Loops
• Functions that Return Arrays
• Searching for an Element in an Array
• Copying an Array
• Split Method and Join Function
• Passing an Array to a Procedure

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 3
Simple and Array Variables

• A variable (or simple variable) is a


name to which Visual Basic can assign
a single value.
• An array variable is a collection of
simple variables of the same type to
which Visual Basic can efficiently assign
a list of values.

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 4
Example
Suppose 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 student0 As String, score0 As Double
Dim student1 As String, score1 As Double
Dim student2 As String, score2 As Double
.
.
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 5
Using Arrays

Upper bound of subscripts


in the array

Dim students(29) As String


Dim scores(29) As Double

Array name Data type

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 6
Putting Values into an Array

students(0) = "Tom Brown"

subscript

Read: "students sub zero equals Tom Brown"


Which means that the string "Tom Brown" is being
stored at the first location in the array called
students because all arrays begin counting at 0.
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 7
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, n + 1, is the
size of the array.

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 8
Example 1: Form

mtbNumber
txtWinner

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 9
Example 1
Private Sub btnWhoWon_Click(...) _
Handles btnWhoWon.Click
Dim teamNames(3) As String
Dim n As Integer
teamNames(0) = "Packers"
teamNames(1) = "Packers"
teamNames(2) = "Jets"
teamNames(3) = "Chiefs"
n = CInt(mtbNumber.Text)
txtWinner.Text = teamName(n - 1)
End Sub
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 10
Example 1: Output

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 11
Load Event Procedure

Occurs as the Form loads in memory


Private Sub frmName_Load(...) _
Handles MyBase.Load

The keyword MyBase refers to the form


being loaded. This event procedure is a
good place to assign values to an array.

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 12
Example 2: Code
Dim teamNames(3) As String
Private Sub frmBowl_Load(...) Handles MyBase.Load
teamNames(0) = "Packers"
teamNames(1) = "Packers"
teamNames(2) = "Jets"
teamNames(3) = "Chiefs"
End Sub
Private Sub btnWhoWon_Click(...) _
Handles btnWhoWon.Click
Dim n As Integer
n = CInt(mtbNumber.Text)
txtWinner.Text = teamNames(n - 1)
End Sub
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 13
Initializing Arrays

Arrays may be initialized when created:


Dim arrayName() As DataType =
{value0, value1, value2, ..., valueN}

declares an array having upper bound N and


assigns value0 to arrayName(0), value1 to
arrayName(1), ..., and valueN to arrayName(N).
Example: Dim teamNames() As String =
{"Packers", "Packers", "Jets", "Chiefs"}

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 14
Text Files

• Hold data to be processed by programs.


• Can be created, viewed, and managed by
word processors or by the Visual Basic IDE.
• Have the extension txt
• Normally placed in the bin\Debug folder in
the Solution Explorer.

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 15
A Text File Displayed in the
Visual Basic IDE
The file contains the ages of the first 44
U.S. presidents when they assumed office.

© 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved. 16


Using a Text File to Populate a
String Array
• Assume that the previous text file is in the
program’s bin\Debug folder.
• The text file can be used to fill a string array
with the statement
Dim strAges() As String =
IO.File.ReadAllLines("AgesAtInaugural.txt")
• The array strAges will have size 44 and
upper bound 43.
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 17
Populating a Numeric Array
with a Text File
Dim strAges() As String =
IO.File.ReadAllLines("AgesAtInaugural.txt")
Dim ages(43) As Integer
For i As Integer = 0 To 43
ages(i) = CInt(strAges(i))
Next

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 18
Array Methods

arrayName.Count number of elements


arrayName.Max highest value
arrayName.Min lowest value
arrayName.First first element
arrayName.Last last element

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 19
Array Methods (continued)

• The upper bound of arrayName is


arrayName.Count – 1

• arrayName.First is the same as


arrayName(0)

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 20
Methods for Numeric Arrays

numArrayName.Average average value of


elements

numArrayName.Sum sum of values of


elements

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 21
Using Loops Instead of
Methods
• In Example 4 the greatest value in a numeric
array ages is determined.
• The value of the variable max is set to the
first element of the array.
• Then a For…Next loop successively
examines each element of the array and
resets the value of max when appropriate.

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 22
Example 4: Code
Dim ages() As Integer = {55, 56, 61, 52, 69,
64, 46, 54, 47} 'last 9 presidents
Dim max As Integer = ages(0)
For i As Integer = 1 To ages.Count - 1
If ages(i) > max Then
max = ages(i)
End If
Next
txtOutput.Text = "Greatest age: " & max
Output: Greatest age: 69
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 23
ReDim Statement

The size of an array may be changed after


it has been created.
The statement ReDim arrayName(m),
where arrayName is the name of the
already declared array and m is an Integer
literal, variable, or expression, changes the
upper bound of the array to m.
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 24
Preserve Keyword

ReDim arrayName(m) resets all values to


their default. This can be prevented with the
keyword Preserve.
ReDim Preserve arrayName(m)
resizes the array and retains as many
values as possible.

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 25
For Each Loops
For i As Integer = 1 To (ages.Count – 1)
If ages(i) > max Then
max = ages(i)
End If
Next

can be replaced with


For Each age As Integer In ages
If age > max Then
max = age
End If
Next
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 26
For Each Loops (continued)

• In the For…Next loop, the counter variable


i can have any name.
• In the For Each loop, the looping variable
age can have any name.
• The primary difference between the two
types of loops is that in a For Each loop no
changes can be made in the values of
elements of the array.
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 27
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 Sub
Function Triple(x As Integer) As Integer
Return 3 * x
End Function
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 28
Functions That Return Arrays

Headers have the form

Function FunctionName(var1 As Type1,


var2 As Type2, ...) As DataType()

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 29
Searching for an Element in
an Array

A statement of the form


numVar = Array.IndexOf(arrayName,
value)
assigns to numVar the index of the first
occurrence of value in arrayName. Or assigns
-1 if the value is not found.

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 30
Copying an Array

If arrayOne and arrayTwo have been


declared with the same data type, then the
statement
arrayOne = arrayTwo

makes arrayOne an exact duplicate of


arrayTwo. Actually, they share the same
location in memory.

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 31
Split Method

• Facilitates working with text files.


• Split can convert a string containing comma-
separated data into a string array.
• The 0th element of the array contains the text
preceding the first comma, the 1st element
contains the text between the first and
second commas, ..., and the last element
contains the text following the last comma.
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 32
Split Example

For instance, suppose the string array


employees has been declared without an
upper bound, and the string variable line has
the value “Bob,23.50,45”.
employees = line.Split(","c)
•sets the size of employees to 3
•sets employees(0) = “Bob”
•sets employees(1) = “23.50”
•sets employees(2) = “45”
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 33
Split Comments
Consider employees = line.Split(","c)
• In this statement, the character comma is
called the delimiter for the Split method,
and the letter c specifies that the comma
has data type Character instead of String
• Any character can be used as a delimiter.
If no character is specified, the space
character will be used as the delimiter.
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 34
Example

Private Sub btnConvert_Click(...) _


Handles btnConvert.Click
Dim stateData(), line As String
line = "California,1850,Sacramento,Eureka"
stateData = line.Split(","c)
For Each entry As String In stateData
lstOutput.Items.Add(entry)
Next
End Sub

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 35
Example Output

California
1850
Sacramento
Eureka

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 36
Join Function

The reverse of the Split method is the Join


function. Join concatenates the elements of a
string array into a string containing the elements
separated by a specified delimiter.
Dim greatLakes() As String = {"Huron",
"Ontario", "Michigan","Erie","Superior"}
Dim lakes As String
lakes = Join(greatLakes, ",")
txtOutput.Text = lakes
Output: Huron,Ontario,Michigan,Erie,Superior
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 37
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.
• The calling statement uses the name of the
array without parentheses.
• The header of the Sub or Function procedure
uses the name with an empty set of
parentheses.
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 38
Variation of Example 4

This example uses a Function procedure to find


the largest number in an array.
Private Sub btnCalculate_Click(...) Handles _
btnCalculate.Click
Dim ages() As Integer = {55, 56, 61, 52,
69, 64, 46, 54, 47} 'last 9 presidents
txtOutput.Text = "Greatest age: " &
Maximum(ages)
End Sub

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 39
Variation of Example 4 (cont.)
Function Maximum(ages() As Integer) As
Integer
Dim max As Integer = ages(0)
For i As Integer = 1 To (ages.Count – 1)
If ages(i) > max Then
max = ages(i)
End If
Next
Return max
End Function

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 40
Out of Range Error
The following code references an array element that
doesn't exist. This will cause an error.

© 2017 Pearson Education, Inc. Hoboken, NJ. All


rights reserved. 41
7.2 Using LINQ with Arrays

• LINQ Queries
• The Distinct Operator
• The ToArray Method
• Use of Function Procedures in Queries
• The Let Operator
• The OrderBy Operator
• The DataSource Property
• Binary Search
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 42
What is LINQ?

• LINQ stands for Language INtegrated Query


• A query is a request for information.
• Note: Option Infer must be set to ON in
order to use LINQ

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 43
LINQ Query
Code of the form
range variable
Dim queryName = From var In arrayName source data
Where [condition on var]
query operators Select var

declares the variable queryName and assigns to


it a sequence of the values from arrayName
that satisfy the stated condition.
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 44
LINQ Query (continued)

The values in the sequence can be


converted to an array, displayed in a list
box, or written to a text file.

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 45
Example 1
'States.txt contains the names of the 50 states
Dim states() As String =
IO.File.ReadAllLines("States.txt")
Dim stateQuery = From state In states
Where state.Length = 5
Select state
For Each state As String In stateQuery
lstStates.Items.Add(state)
Next
Output: Maine, Texas, Idaho
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 46
Variation on Example 1

Replace the For Each loop with


lstStates.Items.Add(stateQuery.Count)
lstStates.Items.Add(stateQuery.Min)
lstStates.Items.Add(stateQuery(1))
Output: 3
Idaho
Texas

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 47
Example 2
Dim nums() As Integer = {5, 12, 8, 7, 11}
Dim numQuery = From num In nums
Where num > 7
Select num
For Each num As Integer In numQuery
lstBox.Items.Add(num)
Next

Output: 12
8
11
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 48
Variation on Example 2

Replace the For Each loop with


lstBox.Items.Add(numQuery.Min)
lstBox.Items.Add(numQuery.First)
lstBox.Items.Add(numQuery.Sum)

Output: 8
12
31

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 49
Another Variation of Example 2
Dim nums() As Integer = {5, 12, 8, 7, 11}
Dim numQuery = From num In nums
Where num > 7
Select num * num changed
For Each num As Integer In numQuery
lstBox.Items.Add(num)
Next

Output: 144
64
121
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 50
Distinct Operator
Dim nums() As Integer = {5, 12, 5, 7, 12}
Dim numQuery = From num In nums
Select num
Distinct
For Each num As Integer In numQuery
lstBox.Items.Add(num)
Next

Output: 5
12
7
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 51
ToArray Method

• A query variable is not an array variable.


• The ToArray method converts it to an array
variable.

Dim nums() As Integer = {5, 12, 5, 7, 12}


Dim numQuery = From num In nums
Select num
Dim numArray() As Integer = numQuery.ToArray

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 52
Function Procedures in Queries

Function procedures are commonly used in


Where and Select clauses
Dim presQuery = From pres In presidents
Where FirstName(pres) =
txtFirstName.Text
Select IncludeTitle(pres)
For Each pres In presQuery
lstPres.Items.Add(pres)
Next
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 53
Continuation of Program
Function IncludeTitle(pres As String) As String
Return "President " & pres
End Function

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 54
Let Operator

• A Let operator gives a name to an


expression and makes queries easier to
read.
• In Section 7.3, situations arise that make the
use of Let operators essential.

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 55
Example of Let Operator
Dim presQuery = From pres In presidents
Select IncludeTitle(pres)

can be replaced with


Dim presQuery = From pres In presidents
Let formalName =
Includetitle(pres)
Select formalName

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 56
Order By Operator

• Sorts string values into alphabetical


order (either ascending or descending)
• Sorts numbers into numeric order (either
ascending or descending)

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 57
Example 4
Dim nums() As Integer = {3, 6, 4, 1}
Dim numQuery = From num In nums
Order By num Ascending
Select num
For Each n As Integer In numQuery
lstOutput.Items.Add(n)
Next

Output: 1
3
4
6

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 58
Example 5
Dim states() As String =
IO.File.ReadAllLines("States.txt")
Dim stateQuery = From state In states
Order By state.Length
Ascending, state Descending
Select state
For Each state As String In stateQuery
lstStates.Items.Add(state)
Next

Output: Utah, Ohio, Iowa, Texas, Maine, `...


© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 59
DataSource Property

• The DataSource property fills a list box


with the values returned by a query.
lstBox.DataSource = queryName.ToList

• The first entry will be highlighed. The


highlighting can be eliminated with
lstBox.SelectedItem = Nothing

© 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved. 60


Alternative for Example 5
Dim states() As String =
IO.File.ReadAllLines("States.txt")
Dim stateQuery = From state In states
Order By state.Length
Ascending, state Descending
Select state
lstStates.DataSource = stateQuery.ToList
lstStates.SelectedItem = Nothing optional line

Output: Utah, Ohio, Iowa, Texas, Maine, ...

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 61
7.3 Arrays of Structures

• Structures
• Arrays of Structures
• The DataGridView Control
• Searching an Array of Structures
• Using General Procedures with Structures
• Displaying and Comparing Structure Values
• Complex Structures (Optional)
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 62
Structures
A structure is a grouping of heterogeneous data.
Also called a UDT (User Defined Type)
Sample structure definition:
Structure Nation
Dim name As String
Dim continent As String
Dim population As Double 'in millions
Dim area As Double 'in square miles
End Structure

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 63
Structure Definition

Each subvariable in a structure is called a


member.
To declare a variable of a structure type:
Dim country As Nation
Each member is accessed via
variableName.memberName
country.continent = "Europe"
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 64
Example 1
Dim country As Nation
'Assign values to country's member variables
Dim line As String =
"China,Asia,1355.7,3696100"
Dim data() As String = line.Split(","c)
country.name = data(0)
country.continent = data(1)
country.population = CDbl(data(2))
country.area = CDbl(data(3))

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 65
Example 1 (continued)

'Display data in text boxes


txtName.Text = country.name
txtContinent.Text = country.continent
txtPop.Text = (1000000 *
country.population).ToString("N0")
txtArea.Text = (country.area).ToString("N0") &
" square miles"
txtDensity.Text = (1000000 * country.population
/ country.area).ToString("N") &
" people per square mile"
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 66
Text File: UN.txt

4 fields (name, continent, pop in millions, area in sq mi)


193 records
Sample records
Canada,North America,34.8,3855000
France,Europe,66.3,211209
New Zealand,Australia/Oceania,4.4,103738
Nigeria,Africa,177.2,356669
Pakistan,Asia,196.2,310403
Peru,South America,30.1,496226
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 67
Example 3: Sample Output

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 68
Example 3: Partial Code
Dim nations(192) As Nation 'declare array
Dim line, data(3) As String 'fill with UN.txt
Dim countries() As String =
IO.File.ReadAllLines("UN.txt")
For i As Integer = 0 To 192
line = countries(i)
data = line.Split(","c)
nations(i).name = data(0)
nations(i).continent = data(1)
nations(i).population = CDbl(data(2))
nations(i).area = CDbl(data(3))
Next
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 69
Example 3: More Partial Code
Dim selectedContinent As String =
lstContinents.Text
Dim query = From country In nations
Where country.continent =
selectedContinent
Order By country.area Descending
Select country.name
For Each countryName As String In query
lstCountries.Items.Add(countryName)
Next
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 70
Structure College

Structure College
Dim name As String
Dim state As String 'state abbreviation
Dim yearFounded As Integer
End Structure

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 71
Text File: Colleges.txt

U.S. Colleges founded before 1800


3 fields (name, state, year founded)

Sample records
Harvard U.,MA,1636
William and Mary,VA,1693
Yale U.,CT,1701
U. of Pennsylvania,PA,1740

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 72
DataGridView Control
• Useful when two or more pieces of
information are to be displayed.
• Found in the Data group and the All
Windows Forms group of the Toolbox.
• Displays a table with column headers.

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 73
DataGridView Control
(continued)

DataGridView
control

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 74
DataSource Property

When the Select clause of a query contains


two or more items, the pair of statements
dgvGrid.DataSource = queryName.ToList
dgvGrid.CurrentCell = Nothing

displays the items of data in a DataGridView


control. (The second statement, which is
optional, keeps all cells unhighlighted.)

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 75
DataGridView Headers
• By default the rows have blank headers
and the column headers contain the
names of the items in the Select clause.

column
row headers
headers

© 2017 Pearson Education, Inc. Hoboken, NJ. All rights reserved. 76


DataGridView Headers (cont.)

• Row headers can be removed by setting


the RowHeadersVisible property of the
DataGridView control to False.
• A column header can be customized with a
statement such as
dgvGrid.Columns("yearFounded").HeaderText =
"Year Founded"
(see next slide)
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 77
DataGridView Headers (cont.)

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 78
Searching an Array of
Structures
The Where clause of a query can be used to
locate specific items.
Example:
Dim query = From institution In colleges
Where institution.name =
lstColleges.Text
Select institution
txtState.Text = query.First.state
txtYear.Text = CStr(query.First.yearFounded)
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 79
Another Structure

Structure Grades
Dim exam1 As Double
Dim exam2 As Double
Dim final As Double
End Structure

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 80
Using General Procedures
with Structures
A variable having a structure as data type can
be passed to a Function or Sub procedure.
Example:
Function CurveGrades(scores As Grades) _
As Grades
scores.exam1 += 3
scores.exam2 += 4
scores.final += 2
Return scores
End Function
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 81
Complex Structures

Member Types
• Integer, Decimal, Double, String, etc.
• Another User Defined Type
• Array
• Must not specify range
• Range must be set using ReDim

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 82
Example 7

This example gathers information about a


student and determines when the student
will be eligible to graduate.

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 83
Example 7
Structure FullName
Dim firstName As String
Dim lastName As String
End Structure
Structure Student
Dim name As FullName Structure "FullName"
Dim credits() As Integer contained, or nested,
End Structure inside Student

Private Sub btnGet_Click(...) Handles _


btnGet.Click
Dim numYears As Integer
Dim person As Student

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 84
Example 7 (continued)
txtResult.Clear()
person.name.firstName = InputBox("First Name:")
person.name.lastName = InputBox("Last Name:")
numYears = CInt(InputBox("Number of years " &
"completed:"))
ReDim person.credits(numYears - 1)
For i As Integer = 0 To (numYears – 1)
person.credits(i) =
CInt(InputBox("Credits in year " & (i + 1)))
Next
DetermineStatus(person)
End Sub
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 85
Example 7 (continued)
Sub DetermineStatus(pupil As Student)
Dim query = From num In pupil.credits
Select num
Dim total As Integer = query.Sum
If (total >= 120) Then
txtResult.Text = pupil.name.firstName & " " &
pupil.name.lastName & " has enough credits."
Else
txtResult.Text = pupil.name.firstName & " " &
pupil.name.lastName & " needs " &
(120 - total) & " more credits to graduate."
End If
End Sub
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 86
7.4 Two-Dimensional Arrays

• Declaring a Two-Dimensional Array Variable


• Implicit Array Sizing and Initialization
• The ReDim Statement
• Filling a Two-Dimensional Array with a Text
File
• Using LINQ with Two-Dimensional Arrays

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 87
Declaring a Two-Dimensional
Array Variable
• One-dimensional arrays store a list of items
of the same type
• Two-dimensional arrays store a table of
items of the same type.
• Consider the rows of the table as numbered
0, 1, 2, ,,, m and the columns numbered 0, 1,
2, …, n. Then the array is declared with
Dim arrayName(m, n) As DataType
Item in ith row, jth column: arrayName(i,j)
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 88
Implicit Array Sizing and
Initialization
Arrays can be initialized when they are declared.
Dim arrayName(,) As DataType =
{{ROW0}, {ROW1}, {ROW2}, ...,
{ROWN}}

declares a two-dimensional array where ROW0


consists of the entries in the top row of the
corresponding table delimited by commas, and
so on.
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 89
Road-Mileage Table

Chicago LA NY Philly
Chicago 0 2054 802 738
LA 2054 0 2786 2706

NY 802 2786 0 100

Philly 738 2706 100 0

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 90
Road-Mileage Array
Dim rm(,) As Double = {{0, 2054, 802, 738},
{2054, 0, 2786, 2706},
{802, 2786, 0, 100},
{738, 2706, 100, 0}}

declares and initializes an array of road


mileages. Some elements of the array are
rm(0,0)=0, rm(0,1)=2054, rm(1,2)=2786

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 91
GetUpperBound Method

After execution of the statement


Dim arrayName(r, s) As varType

the value of arrayName.GetUpperBound(0) is r,


and the value of
arrayName.GetUpperBound(1) is s.

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 92
Notes on Two-Dimensional
Arrays
An unsized two-dimensional array can be
declared with a statement of the form
Dim arrayName(,) As varType

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 93
ReDim and Two-Dimensional
Arrays
• An already-created array can be resized with
ReDim arrayName(r, s)
which loses the current contents, or with
ReDim Preserve arrayName(r, s)
• When Preserve is used, only the columns can
be resized.
• ReDim cannot change the number of
dimensions in the array.
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 94
Filling a Two-Dimensional
Array with a Text File
Distances.txt
0,2054,802,738
2054,0,2786,2706
802,2786,0,100
738,2706,100,0

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 95
Filling a Two-Dimensional
Array with a Text File (cont.)
Dim rm(3, 3) As Double 'road mileage
Dim rowOfNums() As String =
IO.File.ReadAllLines("Distances.txt")
Dim line, data() As String
For i As Integer = 0 To 3
line = rowOfNums(i)
data = line.Split(","c)
For j As Integer = 0 To 3
rm(i, j) = CDbl(data(j))
Next
Next
© 2017 Pearson Education, Inc.
Hoboken, NJ. All rights reserved. 96
LINQ with 2-Dimensional Array

© 2017 Pearson Education, Inc.


Hoboken, NJ. All rights reserved. 97

You might also like