Top Banner
Arrays Arrays Clark Savage Turner, J.D., Ph.D. Clark Savage Turner, J.D., Ph.D. [email protected] [email protected] 805-756-6133 805-756-6133 Copyright © 2000 by C Scheftic. All rights reserved. Copyright © 2000 by C Scheftic. All rights reserved. These notes do rely heavily on ones originally These notes do rely heavily on ones originally developed developed by John Lewis and William Loftus to accompany by John Lewis and William Loftus to accompany Java Software Solutions © Addison-Wesley Java Software Solutions © Addison-Wesley by Ralph Morelli to accompany by Ralph Morelli to accompany Java Java Java © Prentice-Hall Java Java Java © Prentice-Hall and on the textbook by Bailey & Bailey and on the textbook by Bailey & Bailey Java Elements © McGraw Hill Java Elements © McGraw Hill
19

Arrays Clark Savage Turner, J.D., Ph.D. [email protected] Copyright © 2000 by C Scheftic. All rights reserved. These notes do rely heavily.

Dec 20, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Arrays Clark Savage Turner, J.D., Ph.D. csturner@csc.calpoly.edu805-756-6133 Copyright © 2000 by C Scheftic. All rights reserved. These notes do rely heavily.

ArraysArrays

Clark Savage Turner, J.D., Ph.D.Clark Savage Turner, J.D., Ph.D.

[email protected]@csc.calpoly.edu

805-756-6133805-756-6133Copyright © 2000 by C Scheftic. All rights reserved. Copyright © 2000 by C Scheftic. All rights reserved.

These notes do rely heavily on ones originally developedThese notes do rely heavily on ones originally developed by John Lewis and William Loftus to accompany by John Lewis and William Loftus to accompany

Java Software Solutions © Addison-WesleyJava Software Solutions © Addison-Wesley by Ralph Morelli to accompany by Ralph Morelli to accompany

Java Java Java © Prentice-HallJava Java Java © Prentice-Hall and on the textbook by Bailey & Bailey and on the textbook by Bailey & Bailey

Java Elements © McGraw HillJava Elements © McGraw Hill

Page 2: Arrays Clark Savage Turner, J.D., Ph.D. csturner@csc.calpoly.edu805-756-6133 Copyright © 2000 by C Scheftic. All rights reserved. These notes do rely heavily.

CSC-101

ArraysArrays

An An arrayarray is an ordered list of values is an ordered list of values

0 1 2 3 4 5 6 7 8 9

79 87 94 82 67 98 87 81 74 91

An array of size N is indexed from zero to N-1An array of size N is indexed from zero to N-1

scores

The entire arrayThe entire arrayhas a single namehas a single name

Each value has a numeric Each value has a numeric indexindex

This array holds 10 values that are indexed from 0 to 9This array holds 10 values that are indexed from 0 to 9

write & save on board

Page 3: Arrays Clark Savage Turner, J.D., Ph.D. csturner@csc.calpoly.edu805-756-6133 Copyright © 2000 by C Scheftic. All rights reserved. These notes do rely heavily.

CSC-101

ArraysArrays

A particular value in an array is referenced using A particular value in an array is referenced using the array namethe array name followed by followed by the indexthe index (position) (position) in bracketsin brackets

For example, the expressionFor example, the expression

scores[2]scores[2]

refers to the value 94 (which is the 3rd value in the array)refers to the value 94 (which is the 3rd value in the array)

That expression represents a place to store a single integer, That expression represents a place to store a single integer, and can be used wherever an integer variable can be usedand can be used wherever an integer variable can be used

For example, it can be assigned a value, printed, or For example, it can be assigned a value, printed, or used in a calculationused in a calculation

Page 4: Arrays Clark Savage Turner, J.D., Ph.D. csturner@csc.calpoly.edu805-756-6133 Copyright © 2000 by C Scheftic. All rights reserved. These notes do rely heavily.

CSC-101

Referring to Array ElementsReferring to Array Elements

Suppose Suppose jj is is 33 and and kk is is 55 and you use and you use

validvalid scores[ 4 ]scores[ 4 ] // scores[4] is 67// scores[4] is 67 scores[ j ]scores[ j ] // scores[3] is 82// scores[3] is 82 scores[ k ]scores[ k ] // scores[5] is 98// scores[5] is 98 scores[ j + k ]scores[ j + k ] // scores[8] is 74// scores[8] is 74 scores[ k % j ]scores[ k % j ] // scores[2] is 94// scores[2] is 94

invalidinvalid scores[ 4.0 ]scores[ 4.0 ] // double, not int// double, not int scores[ scores[ ''44'' ] ] // char, not int// char, not int scores[ scores[ ""44"" ] ] // String, not int// String, not int scores[ j * k ]scores[ j * k ] // 15 is out of bounds// 15 is out of bounds scores[ 2 * k ]scores[ 2 * k ] // 10 is also out, by 1// 10 is also out, by 1

Page 5: Arrays Clark Savage Turner, J.D., Ph.D. csturner@csc.calpoly.edu805-756-6133 Copyright © 2000 by C Scheftic. All rights reserved. These notes do rely heavily.

CSC-101

ArraysArrays

An array stores multiple values of the An array stores multiple values of the samesame type type That type can be a primitive type or an object typeThat type can be a primitive type or an object type

Therefore, we can create Therefore, we can create an array of integers, or an array of integers, or an array of characters, or an array of characters, or an array of String objects, oran array of String objects, or an array our own objects, an array our own objects, etc.etc.

In Java, the array itself is an object, soIn Java, the array itself is an object, so the name of the array is an object reference variable, & the name of the array is an object reference variable, & the array itself is instantiated separately.the array itself is instantiated separately.

Page 6: Arrays Clark Savage Turner, J.D., Ph.D. csturner@csc.calpoly.edu805-756-6133 Copyright © 2000 by C Scheftic. All rights reserved. These notes do rely heavily.

CSC-101

Declaring ArraysDeclaring Arrays

The The scoresscores array could be declared as follows: array could be declared as follows: int[] scores = new int[10];int[] scores = new int[10]; This is the same as:This is the same as: int[] scores;int[] scores;

scores = new int[10];scores = new int[10];

The variable The variable scoresscores is declared to be of type is declared to be of type int[]int[] (that is, an array of integers)(that is, an array of integers)

It is set to a new array object that can hold 10 integersIt is set to a new array object that can hold 10 integers

Note that the type of the array does not specify its size, but Note that the type of the array does not specify its size, but each object of that type has a specific sizeeach object of that type has a specific size

See See BasicArrayBasicArray.java.java (page 270)(page 270)

Page 7: Arrays Clark Savage Turner, J.D., Ph.D. csturner@csc.calpoly.edu805-756-6133 Copyright © 2000 by C Scheftic. All rights reserved. These notes do rely heavily.

CSC-101

Declaring ArraysDeclaring Arrays

Some examples of array declarations:Some examples of array declarations:

float[] prices = new float[500];float[] prices = new float[500];

boolean[] flags;boolean[] flags;

flags = new boolean[20];flags = new boolean[20];

char[] codes = new char[1750];char[] codes = new char[1750];

Page 8: Arrays Clark Savage Turner, J.D., Ph.D. csturner@csc.calpoly.edu805-756-6133 Copyright © 2000 by C Scheftic. All rights reserved. These notes do rely heavily.

CSC-101

Initializing ArraysInitializing Arrays

When arrays are declared, each cell is always initialized.When arrays are declared, each cell is always initialized. With primitive data types:With primitive data types:

You may initialize them yourself:You may initialize them yourself:int[ ] numbers = { 1, 2, 3, 4, 5}int[ ] numbers = { 1, 2, 3, 4, 5}

If you don’t, initial values are established for you:If you don’t, initial values are established for you:int[ ] digits = new int [5];int[ ] digits = new int [5]; // set each to 0 (zero)// set each to 0 (zero)

With objects:With objects: You may initialize them yourself:You may initialize them yourself:

String[ ] articles = {String[ ] articles = {"" a a"", , ""anan"", , ""thethe""}}

If you don’t, initial values are established for you:If you don’t, initial values are established for you:String[ ] words = new String [5]; String[ ] words = new String [5]; // set each to null// set each to null

But it is a semantic error (at best) to refer to an But it is a semantic error (at best) to refer to an uninstantiated (null) array elementuninstantiated (null) array element

Page 9: Arrays Clark Savage Turner, J.D., Ph.D. csturner@csc.calpoly.edu805-756-6133 Copyright © 2000 by C Scheftic. All rights reserved. These notes do rely heavily.

CSC-101

Bounds CheckingBounds Checking

Once an array is created, it has a fixed sizeOnce an array is created, it has a fixed size

An index used in an array reference must specify An index used in an array reference must specify a valid elementa valid element The index value must be in bounds (0 to N-1)The index value must be in bounds (0 to N-1) The Java interpreter will throw an exception The Java interpreter will throw an exception

if an array index is out of bounds if an array index is out of bounds

This is called automatic bounds checking, andThis is called automatic bounds checking, andwe have encountered this in another form alreadywe have encountered this in another form alreadyString myString = "something";String myString = "something";

System.out.print(charAt(myString.length( )-1));System.out.print(charAt(myString.length( )-1));

Page 10: Arrays Clark Savage Turner, J.D., Ph.D. csturner@csc.calpoly.edu805-756-6133 Copyright © 2000 by C Scheftic. All rights reserved. These notes do rely heavily.

CSC-101

Bounds CheckingBounds Checking

For example, if the array For example, if the array codescodes can hold 100 values, it can can hold 100 values, it can only be indexed using the numbers 0 to 99only be indexed using the numbers 0 to 99

If If countcount has the value 100, then the following reference has the value 100, then the following reference will cause an will cause an ArrayOutOfBoundsExceptionArrayOutOfBoundsException::

System.out.println (codes[count]);System.out.println (codes[count]);

It’s common to introduce It’s common to introduce off-by-one errorsoff-by-one errors when using when using arraysarrays

for (int index=0; index <= 100; index++)codes[index] = index*50 + epsilon;

problem

Page 11: Arrays Clark Savage Turner, J.D., Ph.D. csturner@csc.calpoly.edu805-756-6133 Copyright © 2000 by C Scheftic. All rights reserved. These notes do rely heavily.

CSC-101

Bounds CheckingBounds Checking

Each array object has a public constant (an instance Each array object has a public constant (an instance variable) called variable) called lengthlength that stores the size of the array that stores the size of the array Note that Note that lengthlength holds the number of elements, holds the number of elements,

not the largest indexnot the largest index Like any other Like any other object,object, it is referenced via it is referenced via

the array name:the array name: scores.lengthscores.length

Compare and contrast this with the String method myString.length()myString.length()

See See ReverseNumbersReverseNumbers.java.java (page 272)(page 272) See See LetterCountLetterCount.java.java (page 274)(page 274)

Page 12: Arrays Clark Savage Turner, J.D., Ph.D. csturner@csc.calpoly.edu805-756-6133 Copyright © 2000 by C Scheftic. All rights reserved. These notes do rely heavily.

CSC-101

Initializer ListsInitializer Lists

An An initializer listinitializer list can be used to instantiate and initialize an can be used to instantiate and initialize an array in one steparray in one step

The values are delimited by braces and separated by The values are delimited by braces and separated by commascommas

Examples:Examples:

int[] units = {147, 323, 89, 933, 540, int[] units = {147, 323, 89, 933, 540,

269, 97, 114, 298, 476};269, 97, 114, 298, 476};

char[] letterGrades = {'A', 'B', 'C', 'D', 'F'};char[] letterGrades = {'A', 'B', 'C', 'D', 'F'};

Page 13: Arrays Clark Savage Turner, J.D., Ph.D. csturner@csc.calpoly.edu805-756-6133 Copyright © 2000 by C Scheftic. All rights reserved. These notes do rely heavily.

CSC-101

Initializer ListsInitializer Lists

Note that when an initializer list is used:Note that when an initializer list is used: the the newnew operator is not used operator is not used

(an initializer list can be used only in (an initializer list can be used only in the declaration of an array)the declaration of an array)

no size value is specifiedno size value is specified

(the size of the initialized array is determined (the size of the initialized array is determined by the number of items in the initializer list)by the number of items in the initializer list)

SeeSee Primes.javaPrimes.java (page 278)(page 278)

Page 14: Arrays Clark Savage Turner, J.D., Ph.D. csturner@csc.calpoly.edu805-756-6133 Copyright © 2000 by C Scheftic. All rights reserved. These notes do rely heavily.

CSC-101

Array Declarations RevisitedArray Declarations Revisited

Technically, the brackets of the array type can be Technically, the brackets of the array type can be associated with the array’sassociated with the array’s element type, or itselement type, or its namename

Therefore the following declarations are equivalent:Therefore the following declarations are equivalent:

float[] prices;float[] prices;

float prices[];float prices[];

The first format is generally more readable, and preferred.The first format is generally more readable, and preferred.

Page 15: Arrays Clark Savage Turner, J.D., Ph.D. csturner@csc.calpoly.edu805-756-6133 Copyright © 2000 by C Scheftic. All rights reserved. These notes do rely heavily.

CSC-101

Arrays as ParametersArrays as Parameters

An entire array can be passed to a method as a parameterAn entire array can be passed to a method as a parameter

Like any other object, the reference to the array is passed, Like any other object, the reference to the array is passed, making aliases of the formal and actual parameters. Thus:making aliases of the formal and actual parameters. Thus: changing an array element in the method changing an array element in the method

changes the originalchanges the original

An array element can be passed to a method as well. ThenAn array element can be passed to a method as well. Then it will follow the parameter passing rules of it will follow the parameter passing rules of

that element's typethat element's type

Page 16: Arrays Clark Savage Turner, J.D., Ph.D. csturner@csc.calpoly.edu805-756-6133 Copyright © 2000 by C Scheftic. All rights reserved. These notes do rely heavily.

CSC-101

More on Arrays of ObjectsMore on Arrays of Objects

The elements of an array can be object referencesThe elements of an array can be object references

The following declaration reserves space to store 25 The following declaration reserves space to store 25 references to references to StringString objects objects

String[] words = new String[25];String[] words = new String[25];

It does NOT create the It does NOT create the StringString objects themselves objects themselves Each object stored in an array must be instantiated separately. Each object stored in an array must be instantiated separately. Until then, recall that the cell contains a null reference.Until then, recall that the cell contains a null reference.

See See GradeRangeGradeRange.java.java (page 280) (page 280)

Page 17: Arrays Clark Savage Turner, J.D., Ph.D. csturner@csc.calpoly.edu805-756-6133 Copyright © 2000 by C Scheftic. All rights reserved. These notes do rely heavily.

CSC-101

Arrays of ObjectsArrays of Objects

Objects can have arrays as instance variablesObjects can have arrays as instance variables

Therefore, fairly complex structures can be created simply Therefore, fairly complex structures can be created simply with arrays and objectswith arrays and objects

The software designer must carefully determine an The software designer must carefully determine an organization of data and objects that makes sense for the organization of data and objects that makes sense for the situationsituation

See See Tunes.java Tunes.java (page 282)(page 282) See See CDCollection.javaCDCollection.java (page 284) (page 284) See See CD.javaCD.java (page 286) (page 286)

Page 18: Arrays Clark Savage Turner, J.D., Ph.D. csturner@csc.calpoly.edu805-756-6133 Copyright © 2000 by C Scheftic. All rights reserved. These notes do rely heavily.

CSC-101

Two-Dimensional ArraysTwo-Dimensional Arrays

A A one-dimensional arrayone-dimensional array stores a simple list of values stores a simple list of values

A A two-dimensional arraytwo-dimensional array can be thought of as a table of can be thought of as a table of values, with rows and columnsvalues, with rows and columns

A two-dimensional array element is referenced using two A two-dimensional array element is referenced using two index valuesindex values

To be precise, a two-dimensional array in Java is an array To be precise, a two-dimensional array in Java is an array of arraysof arrays

See See TwoDArray.javaTwoDArray.java (page 299) (page 299)

Page 19: Arrays Clark Savage Turner, J.D., Ph.D. csturner@csc.calpoly.edu805-756-6133 Copyright © 2000 by C Scheftic. All rights reserved. These notes do rely heavily.

CSC-101

Multidimensional ArraysMultidimensional Arrays

An array can have as many dimensions as needed, creating An array can have as many dimensions as needed, creating a multidimensional arraya multidimensional array

Each dimension subdivides the previous one into the Each dimension subdivides the previous one into the specified number of elementsspecified number of elements

Each array dimension has its own Each array dimension has its own lengthlength constant constant

Because each dimension is an array of array references, the Because each dimension is an array of array references, the arrays within one dimension could be of different lengthsarrays within one dimension could be of different lengths