arrays - ncatwilliams.comp.ncat.edu/comp163/arrays.pdf · 2020-01-03 · lots of data •sometimes...

47
Arrays COMP163

Upload: others

Post on 13-Mar-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

ArraysCOMP163

Page 2: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

“Any fool can write code that a computer

can understand. Good programmers

write code that humans can understand.”

Martin Fowler

Page 3: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

ZyBooks

• Read sections 10.1 through 10.8 plus 10.10

• Answer all of the participation questions by midnight on Thursday, November 7, 2019

Page 4: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

This Week’s Program Update

• The movie review program has been posted to Blackboard and is due Friday by midnight

• You need to write two Java files

Page 5: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Lots of Data

• Sometimes programs need to deal with lots of data

• A program that manages a list of the students in a course should not have to create separate variables for each student

• Arrays are a means of holding lots of data in a single variable while still being able to access each individual data item

Page 6: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Data Structures

• Data Structures are ways of organizing data in a program

• Popular data structures are– array– tree– hash table– queue– stack

Page 7: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Arrays

• An array is a set of memory locations with the same name

• All of the variables are of the same type

• You can use an integer to specify which member of the array you are using

• You can use a member of an array anyplace you would use a regular variable

Page 8: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Vectors in Mathematics• Mathematicians often use subscripted variables to

represent elements in a vector

a1, a2, … a12

• Arrays are the computer implementation of a vector

• Indexes are used to specify a member of an array. In Java the index follows the array name in square brackets

a[3] = 678.9;

Page 9: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Arrays• An array is an ordered list of values:

Copyright © 2012 Pearson Education, Inc.

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-1

scores

The entire array

has a single name

Each value has a numeric index

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

Page 10: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Memory Boxes

• An array can be thought of as a row of boxes where each box is a memory location that can store a value

• Each box is numbered starting from zero

• You can specify which box you want to use by indicating the number on the box

Page 11: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Starting from Zero

• Many things in Computer Science start counting with zero

• The first element in an array is element zero

• The second in an array is array[1]

Page 12: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Arrays• A particular value in an array is referenced using the array

name followed by the index in brackets

• For example, the expression

scores[2]

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

• We refer to cat[7] as “cat index 7” or “cat sub 7”

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

Copyright © 2012 Pearson Education, Inc.

Page 13: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Array Use• For example, an array element can be assigned a

value, printed, or used in a calculation:

scores[2] = 89;

scores[first] = scores[first] + 2;

mean = (scores[0] + scores[1])/2;

System.out.println ("Top = " + scores[5]);

pick = scores[rand.nextInt(10)];

Copyright © 2012 Pearson Education, Inc.

Page 14: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

When you use an array, the value inside the square brackets dog[ 7 ] is the

A. data

B. index indicating which element you want

C. length

D. array multiplier

Page 15: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Array Elements

• The values held in an array are its elements

• All the elements must be the same Java type

• An array can hold any type of data, both simple and objects, such as int, double, String, Widgets

Page 16: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Arrays are Objects• In Java, the array itself is an object that must be

instantiated• Another way to depict the scores array:

Copyright © 2012 Pearson Education, Inc.

scores 79

87

94

82

67

98

87

81

74

91

The name of the array

is an object reference

variable

Page 17: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Declaring Arrays• The scores array can be declared as follows:

int[] scores = new int[10];

• The type of the variable scores is int[] (an array of integers)

• Note that the array type does not specify its size

• The reference variable scores is set to a new array object that can hold 10 integers

Copyright © 2012 Pearson Education, Inc.

Page 18: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Declaring Arrays• Some other examples of array declarations:

int[] goat = new int[1600];

double[] hawk = new double[50];

boolean[] flags;

flags = new boolean[10];

Page 19: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Array Example

• The following program reads 17 numbers from the keyboard then prints them in reverse order

Page 20: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

public class PrtArray {

public static void main(String[] args){

java.util.Scanner kb = new

java.util.Scanner(System.in);

int[] cat = new int[17];

for (int bird = 0; bird < 17; bird++) {

cat[bird] = kb.nextInt();

}

for (int dog=16; dog >= 0; dog--) {

System.out.println(cat[dog]);

}

}

}

Page 21: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

How do you declare an array of 7 ints?

A. int dog[7] = new int[];

B. int dog = new int[7];

C. int[] dog = new int[7];

D. int[7] dog = new int[7];

E. int dog[] = new int[7];

Page 22: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Bounds Checking

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

• An index used in an array reference must specify a value in range 0 to N-1 for an N element array

• The Java system throws an ArrayIndexOutOfBoundsException if an array index is too big or negative

• This is called automatic bounds checking

Copyright © 2012 Pearson Education, Inc.

Page 23: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Bad Index

int[] rabbit = new int[4];

rabbit[0] = 47;

rabbit[3] = 32;

rabbit[4] = 14; // this gets an error

• If an array is created with N elements, you can index from zero to N-1

• Bigger numbers generate an error

Page 24: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Off by One• For example, if the array canary can hold 100 values,

it can be indexed from 0 to 99

• It’s common to introduce off-by-one errors when using arrays:

• This will get a run time error

double[] canary = new double[100];

for(int dove = 0;dove <= 100;dove++){

canary[dove] = 0.0;

}

Page 25: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Use of for with Arrays

• The correct way to use a for loop with an array is to start at zero and go to less than the size

double[] canary = new double[100];

for(int dove = 0;dove < 100;dove++){

canary[dove] = 0.0;

}

Page 26: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Size of an Array• Each array object has a public constant called length that stores the size of the array

• It is referenced using the array name

double[] canary = new double[100];

System.out.println(canary.length);

• Note that length holds the number of elements, not the largest index

Copyright © 2012 Pearson Education, Inc.

Page 27: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Using the Length

• You can use the length value to always loop the correct number of times

double[] kennel = new double[something];

for (int index = 0; index < kennel.length; index++) {

kennel[index] = index;

}

Page 28: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

What is displayed?

A. 0

B. 2

C. 4

D. 10

int[] rabbit = new int[5];for (int i = 0; i < 5; i++) {

rabbit[i] = 2 * i;}System.out.println(rabbit[2]);

Page 29: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

What is displayed?

A. 0

B. 2

C. 14

D. None of the above

int[] rabbit = new int[5];for (int i = 0; i < 5; i++) {

rabbit[i] = 2 * i;}System.out.println(rabbit[7]);

Page 30: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Things Arrays Do NOT Do

Assume cat, dog and bird are arrays

• Add, subtract, multiple or divide arrays

cat = dog * bird;

• Compare arrays

if ( cat == dog ) // valid syntax!

• read or write arrays as one unit

System.out.println(cat); // valid syntax!

Page 31: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Incorrectly Printing an Arrayint[] goat = new int[5];

for (int i = 0; i < 5; i++) {

goat[i] = i * i;

}

System.out.println("goat is " + goat);

Displays

goat is [I@15db9742

Page 32: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Correctly Printing an Arrayint[] goat = new int[5];

for (int i = 0; i < 5; i++) {

goat[i] = i * i;

}

for (int k = 0; k < 5; k++) {

System.out.print(goat[k] +" ");

}

Displays

0 1 4 9 16

Page 33: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Using Elements

• When you use an array you almost always have to specify an index in brackets

int[64] cat = new int[64];

// put something in cat

int dog;

dog = cat[14];

• The only time you do not use brackets is when you pass the entire array to a method or use .length

Page 34: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Which for loop should be used to set all values of deer to 47?

A. for(int i = 0; i < deer; i++){

B. for(int i = 0; i <= deer; i++){

C. for(int i = 0; i < deer.length; i++){

D. for(int i = 0; i <= deer.length; i++){

int[] deer = new int[12];

deer[i] = 47;}

Page 35: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

For Loops and Arrays

• Arrays are almost always used in a loop

• The reason for loops often start at zero instead of one it because array indexes start at zero

Page 36: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

For Loop for Arrays

• A for loop is frequently used to go through an array

double sum = 0.0;

double[] dog = new double[??];

// put something in dog

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

sum += dog[i];

}

Page 37: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Extended for Loop

• There is a special format for the for loop to go through an array

double sum = 0.0;

double[] dog = new double[??];

// put something in dog

for ( double cat : dog ) {

sum += cat;

}

Page 38: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Extended for

• In the extended for statement

for ( type element : array )• in each iteration of the loop, the next member of the

array is copied to the element

• The element must be the same type as the elements of the array

• The extended for loop can be used for arrays or iterable classes

Page 39: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Some Iterable Classes

AbstractCollection LinkedBlockingQueueAbstractList LinkedHashSetAbstractQueue LinkedListAbstractSequentialList LinkedTransferQueueAbstractSet PriorityBlockingQueueArrayList PriorityQueueConcurrentLinkedDeque StackConcurrentLinkedQueue SynchronousQueueHashSet TreeSetLinkedBlockingDeque Vector

Page 40: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Irritable, not Iterable

Page 41: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Command Line• The parameters to the main method is an array of Strings

public static void main( String[] args )

• If you execute the compiled program from the command line as

java myprog PIG cow

then

args[0] is “PIG”

args[1] is “cow”

Page 42: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Multiple Dimensions

• An array can have two (or more) indices

double[][] = new double[3][3];

• A 2D array is like a table

• This is a topic for COMP167

0 1 2

0 32.2 14.1 13.7

1 9.2 21.3 5.9

2 69.2 48.0 56.1

Page 43: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Write a Java segment

Assume that the array cat has been created

double[] cat = new double[1000];

and filled with numbers.

Write a loop to display the one biggest number in the array

Page 44: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Possible Solution

double big = cat[0];

for (double num : cat) {

if (num > big ) {

big = num;

}

}

System.out.println( big );

Page 45: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

Possible Solution

double big = cat[0];

for (int eye = 1; eye < cat.length; eye++) {

if (cat[eye] > big ) {

big = cat[eye];

}

}

System.out.println( big );

Page 46: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

ZyBooks

• Read sections 10.1 through 10.8 plus 10.10

• Answer all of the participation questions by midnight on Thursday, November 7, 2019

Page 47: Arrays - NCATwilliams.comp.ncat.edu/COMP163/Arrays.pdf · 2020-01-03 · Lots of Data •Sometimes programs need to deal with lots of data •A program that manages a list of the

This Week’s Program Update

• The movie review program has been posted to Blackboard and is due Friday by midnight

• You need to write two Java files