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

ITC C106 Lecture - Java Arrays

Uploaded by

Isaac esparrago
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
5 views

ITC C106 Lecture - Java Arrays

Uploaded by

Isaac esparrago
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 49

ITC C106 – Computer

Programming II

Java Arrays

Prepared by: A. C. Valderama – CSE- IT


Dept.
Introduction to Arrays
• Primitive variables are designed to hold only
one value at a time.
• Arrays allow us to create a collection of like
values that are indexed.
• An array can store any type of data but only
one type of data at a time.
• An array is a list of data elements.

Prepared by: A. C. Valderama – CSE- IT


Dept.
Creating Arrays
• An array is an object, so it needs an object reference.

// Declare a reference to an array that will hold integers.


int[] numbers;

• The next step creates the array and assigns its address to the
numbers variable.
// Create a new array that will hold 6 integers.
numbers = new int[6];

0 0 0 0 0 0
index 0 index 1 index 2 index 3 index 4 index 5
Array element values are initialized to 0.
Array indexes always start at 0.
Prepared by: A. C. Valderama – CSE- IT
Dept.
Creating Arrays
• It is possible to declare an array reference and create
it in the same statement.

int[] numbers = new int[6];

• Arrays may be of any type.

float[] temperatures = new float[100];


char[] mid_initials = new char[41];
long[] units = new long[50];
double[] sizes = new double[1200];

Prepared by: A. C. Valderama – CSE- IT


Dept.
Creating Arrays

• The array size must be a non-negative number.


• It may be a literal value, a constant, or variable.

final int ARRAY_SIZE = 6;


int[] numbers = new int[ARRAY_SIZE];

• Once created, an array size is fixed and cannot be


changed.

Prepared by: A. C. Valderama – CSE- IT


Dept.
Accessing the Elements of an Array
20 0 0 0 0 0
numbers[0] numbers[1] numbers[2] numbers[3] numbers[4] numbers[5]

• An array is accessed by:


– the reference name
– a subscript that identifies which element in the array to
access.

numbers[0] = 20;

Prepared by: A. C. Valderama – CSE- IT


Dept.
Inputting and Outputting
Array Elements

• Array elements can be treated as any other variable.


• They are simply accessed by the same name and a
subscript.
• Array subscripts can be accessed using variables
(such as for loop counters).

Prepared by: A. C. Valderama – CSE- IT


Dept.
Bounds Checking
• Array indexes always start at zero and continue to
(array length - 1).

int[] values = new int[10];

• This array would have indexes 0 through 9.


• In for loops, it is typical to use i, j, and k as counting
variables.
– It might help to think of i as representing the word index.

Prepared by: A. C. Valderama – CSE- IT


Dept.
Off-by-One Errors
• It is very easy to be off-by-one when accessing arrays.

// This code has an off-by-one error.


int[] numbers = new int[100];
for (int i = 1; i <= 100; i++)
numbers[i] = 99;

• Here, the equal sign allows the loop to continue on to index


100, where 99 is the last index in the array.
• This code would throw an
ArrayIndexOutOfBoundsException.

Prepared by: A. C. Valderama – CSE- IT


Dept.
Array Initialization
• When relatively few items need to be initialized, an
initialization list can be used to initialize the array.

int[]days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

• The numbers in the list are stored in the array in order:


– days[0] is assigned 31,
– days[1] is assigned 28,
– days[2] is assigned 31,
– days[3] is assigned 30,
– etc.

Prepared by: A. C. Valderama – CSE- IT


Dept.
Alternate Array Declaration
• Previously we showed arrays being declared:
int[] numbers;

– However, the brackets can also go here:


int numbers[];

– These are equivalent but the first style is typical.

• Multiple arrays can be declared on the same line.


int[] numbers, codes, scores;

• With the alternate notation each variable must have brackets.


int numbers[], codes[], scores;
– The scores variable in this instance is simply an int variable.

Prepared by: A. C. Valderama – CSE- IT


Dept.
Processing Array Contents
• Processing data in an array is the same as any other
variable.
grossPay = hours[3] * payRate;

• Pre and post increment works the same:


int[] score = {7, 8, 9, 10, 11};
++score[2]; // Pre-increment operation
score[4]++; // Post-increment operation

Prepared by: A. C. Valderama – CSE- IT


Dept.
Processing Array Contents
• Array elements can be used in relational operations:
if(cost[20] < cost[0])
{
//statements
}

• They can be used as loop conditions:


while(value[count] != 0)
{
//statements
}

Prepared by: A. C. Valderama – CSE- IT


Dept.
Array Length
• Arrays are objects and provide a public field named length
that is a constant that can be tested.

double[] temperatures = new double[25];

– The length of this array is 25.

• The length of an array can be obtained via its length


constant.

int size = temperatures.length;

– The variable size will contain 25.

Prepared by: A. C. Valderama – CSE- IT


Dept.
The Enhanced for Loop

• Simplified array processing (read only)


• Always goes through all elements
• General format:

for(datatype elementVariable : array)


statement;

Prepared by: A. C. Valderama – CSE- IT


Dept.
The Enhanced for Loop

Example:

int[] numbers = {3, 6, 9};


for(int val : numbers)
{
System.out.println("The next value is " +
val);
}

Prepared by: A. C. Valderama – CSE- IT


Dept.
Array Size
• The length constant can be used in a
loop to provide automatic bounding.
Index subscripts start at 0 and end at one less than the array length.

for(int i = 0; i < temperatures.length; i++)


{
System.out.println("Temperature " + i ": "
+ temperatures[i]);
}

Prepared by: A. C. Valderama – CSE- IT


Dept.
Array Size
• You can let the user specify the size of an array:

int numTests;
int[] tests;
Scanner keyboard = new Scanner(System.in);
System.out.print("How many tests do you have? ");
numTests = keyboard.nextInt();
tests = new int[numTests];

Prepared by: A. C. Valderama – CSE- IT


Dept.
Reassigning Array References
• An array reference can be assigned to another array
of the same type.

// Create an array referenced by the numbers variable.


int[] numbers = new int[10];
// Reassign numbers to a new array.
numbers = new int[5];

• If the first (10 element) array no longer has a


reference to it, it will be garbage collected.

Prepared by: A. C. Valderama – CSE- IT


Dept.
Reassigning Array References

int[] numbers = new int[10];

Address

The numbers variable


holds the address of an
int array.

Prepared by: A. C. Valderama – CSE- IT


Dept.
Reassigning Array References

This array gets marked for


garbage collection
Address

The numbers variable


holds the address of an numbers = new int[5];
int array.

Prepared by: A. C. Valderama – CSE- IT


Dept.
Copying Arrays
• This is not the way to copy an array.
int[] array1 = { 2, 4, 6, 8, 10 };
int[] array2 = array1; // This does not copy array1.

2 4 6 8 10

array1 holds an
address to the array Address

array2 holds an
Address
address to the array

Prepared by: A. C. Valderama – CSE- IT


Dept.
Copying Arrays
• You cannot copy an array by merely assigning one
reference variable to another.
• You need to copy the individual elements of one array to
another.

int[] firstArray = {5, 10, 15, 20, 25 };


int[] secondArray = new int[5];
for (int i = 0; i < firstArray.length; i++)
secondArray[i] = firstArray[i];

• This code copies each element of firstArray to the


corresponding element of secondArray.

Prepared by: A. C. Valderama – CSE- IT


Dept.
Passing Arrays as Arguments
• Arrays are objects.
• Their references can be passed to methods like any
other object reference variable.
showArray(numbers); 5 10 15 20 25 30 35 40

Address

public static void showArray(int[] array)


{
for (int i = 0; i < array.length; i++)
System.out.print(array[i] + " ");
}
Prepared by: A. C. Valderama – CSE- IT
Dept.
Comparing Arrays
• The == operator determines only whether array
references point to the same array object.

int[] firstArray = { 5, 10, 15, 20, 25 };


int[] secondArray = { 5, 10, 15, 20, 25 };

if (firstArray == secondArray) // This is a mistake.


System.out.println("The arrays are the same.");
else
System.out.println("The arrays are not the same.");

Prepared by: A. C. Valderama – CSE- IT


Dept.
Comparing Arrays: Example
int[] firstArray = { 2, 4, 6, 8, 10 };
int[] secondArray = { 2, 4, 6, 8, 10 };
boolean arraysEqual = true;
int i = 0;

// First determine whether the arrays are the same size.


if (firstArray.length != secondArray.length)
arraysEqual = false;

// Next determine whether the elements contain the same data.


while (arraysEqual && i < firstArray.length)
{
if (firstArray[i] != secondArray[i])
arraysEqual = false;
i++;
}

if (arraysEqual)
System.out.println("The arrays are equal.");
else
System.out.println("The arrays are not equal.");

Prepared by: A. C. Valderama – CSE- IT


Dept.
Useful Array Operations
• Finding the Highest Value
int [] numbers = new int[50];
int highest = numbers[0];
for (int i = 1; i < numbers.length; i++)
{
if (numbers[i] > highest)
highest = numbers[i];
}

• Finding the Lowest Value


int lowest = numbers[0];
for (int i = 1; i < numbers.length; i++)
{
if (numbers[i] < lowest)
lowest = numbers[i];
}

Prepared by: A. C. Valderama – CSE- IT


Dept.
Useful Array Operations
• Summing Array Elements:
int total = 0; // Initialize accumulator
for (int i = 0; i < units.length; i++)
total += units[i];

• Averaging Array Elements:


double total = 0; // Initialize accumulator
double average; // Will hold the average
for (int i = 0; i < scores.length; i++)
total += scores[i];
average = total / scores.length;

Prepared by: A. C. Valderama – CSE- IT


Dept.
String Arrays
• Arrays are not limited to primitive data.
• An array of String objects can be created:
String[] names = { "Bill", "Susan", "Steven", "Jean" };

The names variable holds A String array is an array


the address to the array. of references to String objects.
Address

names[0] address “Bill”


names[1] address “Susan”
names[2] address “Steven”
names[3] address “Jean”

Prepared by: A. C. Valderama – CSE- IT


Dept.
String Arrays
• If an initialization list is not provided, the new keyword
must be used to create the array:
String[] names = new String[4];

The names variable holds


the address to the array.

Address

names[0] null
names[1] null
names[2] null
names[3] null

Prepared by: A. C. Valderama – CSE- IT


Dept.
String Arrays
• When an array is created in this manner, each element
of the array must be initialized.

names[0] = "Bill";
names[1] = "Susan";
The names variable holds names[2] = "Steven";
the address to the array. names[3] = "Jean";

Address

names[0] null “Bill”


names[1] null “Susan”
names[2] null “Steven”
names[3] null “Jean”

Prepared by: A. C. Valderama – CSE- IT


Dept.
The length Field & The length Method

• Arrays have a final field named length.


• String objects have a method named length.
• To display the length of each string held in a String array:

for (int i = 0; i < names.length; i++)


System.out.println(names[i].length());

• An array’s length is a field


– You do not write a set of parentheses after its name.
• A String’s length is a method
– You do write the parentheses after the name of the String class’s
length method.

Prepared by: A. C. Valderama – CSE- IT


Dept.
Two-Dimensional Arrays
• A two-dimensional array is an array of arrays.
• It can be thought of as having rows and columns.

column 0 column 1 column 2 column 3

row 0

row 1

row 2
row 3

Prepared by: A. C. Valderama – CSE- IT


Dept.
Two-Dimensional Arrays
• Declaring a two-dimensional array requires two sets of
brackets and two size declarators
– The first one is for the number of rows
– The second one is for the number of columns.
double[][] scores = new double[3][4];
two dimensional array
rows columns
• The two sets of brackets in the data type indicate that the
scores variable will reference a two-dimensional array.
• Notice that each size declarator is enclosed in its own set of
brackets.

Prepared by: A. C. Valderama – CSE- IT


Dept.
Accessing Two-Dimensional Array
Elements
• When processing the data in a two-dimensional
array, each element has two subscripts:
– one for its row and
– another for its column.

Prepared by: A. C. Valderama – CSE- IT


Dept.
Accessing Two-Dimensional Array
Elements
The scores variable
holds the address of a
2D array of doubles.
Address
column 0 column 1 column 2 column 3

row 0 scores[0][0] scores[0][1] scores[0][2] scores[0][3]


row 1 scores[1][0] scores[1][1] scores[1][2] scores[1][3]

row 2 scores[2][0] scores[2][1] scores[2][2] scores[2][3]

Prepared by: A. C. Valderama – CSE- IT


Dept.
Accessing Two-Dimensional Array
Elements
The scores variable Accessing one of the elements in a
holds the address of a two-dimensional array requires the use
2D array of doubles. of both subscripts.

Address scores[2][1] = 95;

column 0 column 1 column 2 column 3

row 0 0 0 0 0
row 1 0 0 0 0

row 2 0 95 0 0

Prepared by: A. C. Valderama – CSE- IT


Dept.
Accessing Two-Dimensional Array
Elements
• Programs that process two-dimensional arrays can
do so with nested loops.
• To fill the scores array:

for (int row = 0; row < 3; row++)


{
for (int col = 0; col < 4; col++)
{
System.out.print("Enter a score: ");
scores[row][col] = keyboard.nextDouble();
}
} keyboard references a
Scanner object

Prepared by: A. C. Valderama – CSE- IT


Dept.
Accessing Two-Dimensional Array
Elements
• To print out the scores array:

for (int row = 0; row < 3; row++)


{
for (int col = 0; col < 4; col++)
{
System.out.println(scores[row][col]);
}
}

Prepared by: A. C. Valderama – CSE- IT


Dept.
Initializing a Two-Dimensional
Array
• Initializing a two-dimensional array requires enclosing each
row’s initialization list in its own set of braces.

int[][] numbers = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };

• Java automatically creates the array and fills its elements with
the initialization values.
– row 0 {1, 2, 3}
– row 1 {4, 5, 6}
– row 2 {7, 8, 9}
• Declares an array with three rows and three columns.

Prepared by: A. C. Valderama – CSE- IT


Dept.
Initializing a Two-Dimensional Array
int[][] numbers = {{1, 2, 3},
{4, 5, 6},
{7, 8, 9}};
produces:

The numbers variable


holds the address of a
2D array of int values.
column 0 column 1 column 2
Address
row 0 1 2 3
row 1 4 5 6
row 2 7 8 9

Prepared by: A. C. Valderama – CSE- IT


Dept.
The length Field
• Two-dimensional arrays are arrays of one-
dimensional arrays.
• The length field of the array gives the number of
rows in the array.
• Each row has a length constant that tells us how
many columns is in that row.
• Each row can have a different number of columns.

Prepared by: A. C. Valderama – CSE- IT


Dept.
The length Field
• To access the length fields of the array:
int[][] numbers = { { 1, 2, 3, 4 },
{ 5, 6, 7 },
{ 9, 10, 11, 12 } };

for (int row = 0; row < numbers.length; row++)


{
for (int col = 0; col < numbers[row].length;col++)
System.out.println(numbers[row][col]);
}

Number of rows Number of columns in this row.

The array can have variable length rows.

Prepared by: A. C. Valderama – CSE- IT


Dept.
Summing The Elements of a Two-
Dimensional Array
int[][] numbers = { { 1, 2, 3, 4 },
{5, 6, 7, 8},
{9, 10, 11, 12} };
int total;
total = 0;
for (int row = 0; row < numbers.length; row++)
{
for (int col = 0; col < numbers[row].length; col++)
total += numbers[row][col];
}

System.out.println("The total is " + total);

Prepared by: A. C. Valderama – CSE- IT


Dept.
Summing The Rows of a Two-
Dimensional Array
int[][] numbers = {{ 1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}};
int total;

for (int row = 0; row < numbers.length; row++)


{
total = 0;
for (int col = 0; col < numbers[row].length; col++)
total += numbers[row][col];
System.out.println("Total of row "
+ row + " is " + total);
}

Prepared by: A. C. Valderama – CSE- IT


Dept.
Summing The Columns of a Two-
Dimensional Array
int[][] numbers = {{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}};
int total;

for (int col = 0; col < numbers[0].length;


col++)
{
total = 0;
for (int row = 0; row < numbers.length; row++)
total += numbers[row][col];
System.out.println("Total of column "
+ col + " is " + total);
}

Prepared by: A. C. Valderama – CSE- IT


Dept.
Passing and Returning Two-
Dimensional Array References
• There is no difference between passing a single or
two-dimensional array as an argument to a
method.
• The method must accept a two-dimensional array
as a parameter.

Prepared by: A. C. Valderama – CSE- IT


Dept.
Resources:
• Adapted and edited from Java
Programming, Beaulieu College

Prepared by: A. C. Valderama – CSE- IT


Dept.
Thank you!

Prepared by: A. C. Valderama – CSE- IT


Dept.

You might also like