+ All Categories
Home > Documents > Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University...

Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University...

Date post: 16-Jan-2016
Category:
Upload: merry-dean
View: 220 times
Download: 0 times
Share this document with a friend
103
Liang, Introduction to Java Programming 1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma
Transcript
Page 1: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

Liang, Introduction to Java Programming 1

Arrays

Gang Qian

Department of Computer ScienceUniversity of Central Oklahoma

Page 2: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

2

Objectives

Using arrays: declaring array reference variables and creating arrays

Initializing the values in an array Copying contents from one array to another Methods with array arguments and return

type Search Algorithms: Linear and Binary search Selection Sort Algorithm Multidimensional arrays

Page 3: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

3

Introducing Arrays

A variable or a constant correspond to a single value

Motivation question: The user will enter several integers and then

display each of them in ascending order. If we do not know how many integers will be entered before hand, we cannot solve the problem

An array is a data structure that represents a sequence of the same types of data

Page 4: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

4

Declaring Array Variables

Syntax: datatype[] arrayRefVar;

Example: double[] myList;

Alternative syntax: datatype arrayRefVar[]; // This style is allowed, but not preferred

Example: double myList[];

Page 5: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

5

Creating Arrays

Syntax: arrayRefVar = new datatype[arraySize]; Example:myList = new double[10]; myList[0] references the first element in the

array. myList[9] references the last element in the array.

Page 6: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

6

Declaring and Creating in One Step Syntax: datatype[] arrayRefVar = new datatype[arraySize];

Example: double[] myList = new double[10];

Alternative Syntax:

datatype arrayRefVar[] = new datatype[arraySize];

Example: double myList[] = new double[10];

Page 7: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

7

5.6

4.5

3.3

13.2

4

34.33

34

45.45

99.993

11123

double[] myList = new double[10];

myList reference myList[0]

myList[1]

myList[2]

myList[3]

myList[4]

myList[5]

myList[6]

myList[7]

myList[8]

myList[9]

Element value

Array reference variable

Array element at index 5

Page 8: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

8

The Length of an Array

Once an array is created, its size is fixed Array size cannot be changed

We can find its size using the following syntax: arrayRefVar.length Note that length is a constant, not a method

There is no parentheses following length

For example, myList.length returns 10

Page 9: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

9

Default Values

When an array is created, its elements are assigned the default values 0 for the numeric data types

'\u0000' for char types false for boolean types

Caution: This is only true in Java In many other programming languages, a array

must be explicitly initialized after being created E.g., C, C++, Pascal, etc.

Page 10: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

10

Indexed Variables

The array elements are accessed through the index

The array indices are 0-based It starts from 0 to arrayRefVar.length-1 In the previous figure, myList holds ten double

values and the indices are from 0 to 9 Each element in the array is represented

using the following syntax, known as an indexed variable:arrayRefVar[index]

Page 11: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

11

Using Indexed Variables

After an array is created, an indexed variable can be used in the same way as a regular variable

For example, the following code adds the value in myList[0] and myList[1] to myList[2]:myList[2] = myList[0] + myList[1];

Page 12: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

12

Array Initializers

Java has a shorthand notation to declare, create, and initialize an array in one statement:double[] myList = {1.9, 2.9, 3.4, 3.5};

This shorthand notation is equivalent to the following statements:double[] myList = new double[4];

myList[0] = 1.9;

myList[1] = 2.9;

myList[2] = 3.4;

myList[3] = 3.5;

Page 13: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

13

CAUTION

This shorthand syntax must be in one statement

The following is incorrect:double[] myList = new double[4];

myList= {1.9, 2.9, 3.4, 3.5};

Page 14: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

14

Trace Program with Arrays

public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { values[i] = i + values[i-1]; } values[0] = values[1] + values[4]; }}

Declare array variable values, create an array, and assign its reference to values

After the array is created

0

1

2

3

4

0

0

0

0

0

Page 15: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

15

public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { values[i] = i + values[i-1]; } values[0] = values[1] + values[4]; }}

i becomes 1

After the array is created

0

1

2

3

4

0

0

0

0

0

Page 16: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

16

public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { values[i] = i + values[i-1]; } values[0] = values[1] + values[4]; }}

i (=1) is less than 5

After the array is created

0

1

2

3

4

0

0

0

0

0

Page 17: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

17

In the first iteration

0

1

2

3

4

0

1

0

0

0

public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { values[i] = i + values[i-1]; } values[0] = values[1] + values[4]; }}

After this line is executed, value[1] is 1

Page 18: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

18

public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { values[i] = i + values[i-1]; } values[0] = values[1] + values[4]; }}

After i++, i becomes 2

In the first iteration

0

1

2

3

4

0

1

0

0

0

Page 19: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

19

public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { values[i] = i + values[i-1]; } values[0] = values[1] + values[4]; }}

i (= 2) is less than 5

In the first iteration

0

1

2

3

4

0

1

0

0

0

Page 20: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

20

In the second iteration

0

1

2

3

4

0

1

3

0

0

public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { values[i] = i + values[i-1]; } values[0] = values[1] + values[4]; }}

After this line is executed, values[2] is 3 (2 + 1)

Page 21: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

21

public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { values[i] = i + values[i-1]; } values[0] = values[1] + values[4]; }}

After this, i becomes 3

In the second iteration

0

1

2

3

4

0

1

3

0

0

Page 22: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

22

public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { values[i] = i + values[i-1]; } values[0] = values[1] + values[4]; }}

i (=3) is still less than 5.

In the second iteration

0

1

2

3

4

0

1

3

0

0

Page 23: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

23

public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { values[i] = i + values[i-1]; } values[0] = values[1] + values[4]; }}

After this line, values[3] becomes 6 (3 + 3)

In the third iteration

0

1

2

3

4

0

1

3

6

0

Page 24: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

24

public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { values[i] = i + values[i-1]; } values[0] = values[1] + values[4]; }}

After this, i becomes 4

In the third iteration

0

1

2

3

4

0

1

3

6

0

Page 25: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

25

public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { values[i] = i + values[i-1]; } values[0] = values[1] + values[4]; }}

i (=4) is still less than 5

In the third iteration

0

1

2

3

4

0

1

3

6

0

Page 26: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

26

public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { values[i] = i + values[i-1]; } values[0] = values[1] + values[4]; }}

After this, values[4] becomes 10 (4 + 6)

In the fourth iteration

0

1

2

3

4

0

1

3

6

10

Page 27: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

27

public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { values[i] = i + values[i-1]; } values[0] = values[1] + values[4]; }}

After i++, i becomes 5

In the fourth iteration

0

1

2

3

4

0

1

3

6

10

Page 28: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

28

public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { values[i] = i + values[i-1]; } values[0] = values[1] + values[4]; }}

i ( =5) < 5 is false. Exit the loop

In the fourth iteration

0

1

2

3

4

0

1

3

6

10

Page 29: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

29

0

1

2

3

4

11

1

3

6

10

public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { values[i] = i + values[i-1]; } values[0] = values[1] + values[4]; }}

After this line, values[0] is 11 (1 + 10)

Page 30: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

30

Examples of Arrays Processing Initializing an array with random values

between 0.0 and 99.0double[] myList = new double[4];

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

myList[i] = Math.random() * 100;

}

Printing an arrayfor (int i = 0; i < myList.length; i++) {

System.out.print(myList[i] + " ");

}

Page 31: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

31

Summing all elementsdouble total = 0;

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

total += myList[i];

}

Finding the largest elementdouble max = myList[0];

for (int i = 1; i < myList.length; i++) {

if (myList[i] > max)

max = myList[i];

}

Page 32: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

32

Finding the smallest index of the largest elementdouble max = myList[0];

int indexOfMax = 0;

for (int i = 1; i < myList.length; i++) {

if (myList[i] > max) {

max = myList[i];

indexOfMax = i;

}

}

Page 33: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

33

Example: Testing Arrays (TestArray.java) Objective: The program receives 6 numbers from

the user, finds the largest number and counts the occurrence of the largest number entered Suppose you entered 3, 5, 2, 5, 5, and 5, the largest

number is 5 and its occurrence count is 4

Page 34: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

34

See Arrays in NetBeans Debugger You can trace the value of array elements in the debugger

using the Interactions pane

Page 35: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

35

Example: Assigning Grades (AssignGrade.java) Objective: read student scores (int), get the

best score, and then assign grades based on the following scheme: Grade is A if score is >= best–10; Grade is B if score is >= best–20; Grade is C if score is >= best–30; Grade is D if score is >= best–40; Grade is F otherwise

Page 36: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

36

Copying Arrays (The Wrong Way) Often, in a program, you need to duplicate an array or a part of

an array. In such cases you could attempt to use the assignment statement (=), as follows: list2 = list1;

Contents of list1

list1

Contents of list2

list2

Before the assignment list2 = list1;

Contents of list1

list1

Contents of list2

list2

After the assignment list2 = list1;

Garbage

Page 37: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

37

Copying Arrays (The Correct Way) Using a loop:

int[] sourceArray = {2, 3, 1, 5, 10};

int[] targetArray = new int[sourceArray.length];

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

targetArray[i] = sourceArray[i];

Page 38: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

38

Passing Arrays to Methods

Defining a method that takes an int array as a formal parameterpublic static void printArray(int[] array) { for (int i = 0; i < array.length; i++) { System.out.print(array[i] + " "); }}

Invoking the method with an int array as an argument (actual parameter)int[] list = {3, 1, 2, 6, 4, 2};printArray(list);

Page 39: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

39

Pass By Value Revisited

Java always uses pass by value to pass parameters to a method However, there are important differences between passing a

value of variables of primitive data types and passing arrays For a parameter of a primitive type value, the actual value is

passed Changing the value of the formal parameter inside the method

does not affect the value of the actual parameter outside the method

For a parameter of an array type, the value of the parameter contains a reference to an array; this reference is passed to the method Any changes to the array that occur inside the method body will

affect the original array that was passed as the argument

Page 40: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

40

Simple Example

public class Test { public static void main(String[] args) { int x = 1; // an int value int[] y = new int[10]; // an array of int values  m(x, y); // Invoke m with arguments x and y  System.out.println("x is " + x); System.out.println("y[0] is " + y[0]); }  public static void m(int number, int[] numbers) { number = 1001; // A new value to number numbers[0] = 5555; // A new value to numbers[0] }}

Page 41: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

41

Call Stack

Space required for the main method int[] y: int x: 1

Stack Space required for method m int[] numbers: int number: 1

reference

Array of ten int values is stored here

The arrays are stored in a heap.

Heap

reference

When invoking m(x, y), the values of x and y are passed to number and numbers. Since y contains the reference value to the array, numbers now contains the same reference value to the same array

Page 42: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

42

Heap

The JVM stores the array in an area of memory, called heap, which is used for dynamic memory allocation where blocks of memory are allocated and freed in an arbitrary order

Space required for the main method int[] y: int x: 1

Stack Space required for method m int[] numbers: int number: 1

reference

Array of ten int values is stored here

The arrays are stored in a heap.

Heap

reference

Page 43: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

43

Example: Passing Arrays as Arguments (TestPassArray.java) Objective: Demonstrate differences of

passing primitive data type variables and array variables

Page 44: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

44

Invoke swap(int n1, int n2). The primitive type values in a[0] and a[1] are passed to the swap method.

Space required for the main method int[] a

Stack Space required for the swap method

n2: 2 n1: 1

reference a[1]: 2 a[0]: 1

The arrays are stored in a heap.

Invoke swapFirstTwoInArray(int[] array). The reference value in a is passed to the swapFirstTwoInArray method.

Heap

Space required for the main method int[] a

Stack Space required for the swapFirstTwoInArray method int[] array

reference

reference

Page 45: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

45

Returning an Array from a Method Define the method that returns an arraypublic static int[] reverse(int[] list) { int[] result = new int[list.length];  for (int i = 0, j = result.length - 1; i < list.length; i++, j--) { result[j] = list[i]; }  return result;} Call the methodint[] list1 = {1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1);

Page 46: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

46

int[] list1 = new int[]{1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1);

public static int[] reverse(int[] list) { int[] result = new int[list.length];  for (int i = 0, j = result.length - 1; i < list.length; i++, j--) { result[j] = list[i]; }  return result;}

Trace the reverse Method

list

result

1 2 3 4 5 6

0 0 0 0 0 0

Declare result and create array

Page 47: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

47

int[] list1 = new int[]{1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1);

public static int[] reverse(int[] list) { int[] result = new int[list.length];  for (int i = 0, j = result.length - 1; i < list.length; i++, j--) { result[j] = list[i]; }  return result;}

list

result

1 2 3 4 5 6

0 0 0 0 0 0

i = 0 and j = 5

Page 48: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

48

int[] list1 = new int[]{1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1);

public static int[] reverse(int[] list) { int[] result = new int[list.length];  for (int i = 0, j = result.length - 1; i < list.length; i++, j--) { result[j] = list[i]; }  return result;}

list

result

1 2 3 4 5 6

0 0 0 0 0 0

i (= 0) is less than 6

Page 49: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

49

int[] list1 = new int[]{1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1);

public static int[] reverse(int[] list) { int[] result = new int[list.length];  for (int i = 0, j = result.length - 1; i < list.length; i++, j--) { result[j] = list[i]; }  return result;}

list

result

1 2 3 4 5 6

0 0 0 0 0 1

i = 0 and j = 5 Assign list[0] to result[5]

Page 50: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

50

int[] list1 = new int[]{1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1);

public static int[] reverse(int[] list) { int[] result = new int[list.length];  for (int i = 0, j = result.length - 1; i < list.length; i++, j--) { result[j] = list[i]; }  return result;}

list

result

1 2 3 4 5 6

0 0 0 0 0 1

After this, i becomes 1 and j becomes 4

Page 51: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

51

int[] list1 = new int[]{1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1);

public static int[] reverse(int[] list) { int[] result = new int[list.length];  for (int i = 0, j = result.length - 1; i < list.length; i++, j--) { result[j] = list[i]; }  return result;}

list

result

1 2 3 4 5 6

0 0 0 0 0 1

i (=1) is less than 6

Page 52: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

52

int[] list1 = new int[]{1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1);

public static int[] reverse(int[] list) { int[] result = new int[list.length];  for (int i = 0, j = result.length - 1; i < list.length; i++, j--) { result[j] = list[i]; }  return result;}

list

result

1 2 3 4 5 6

0 0 0 0 2 1

i = 1 and j = 4 Assign list[1] to result[4]

Page 53: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

53

int[] list1 = new int[]{1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1);

public static int[] reverse(int[] list) { int[] result = new int[list.length];  for (int i = 0, j = result.length - 1; i < list.length; i++, j--) { result[j] = list[i]; }  return result;}

list

result

1 2 3 4 5 6

0 0 0 0 2 1

After this, i becomes 2 and j becomes 3

Page 54: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

54

int[] list1 = new int[]{1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1);

public static int[] reverse(int[] list) { int[] result = new int[list.length];  for (int i = 0, j = result.length - 1; i < list.length; i++, j--) { result[j] = list[i]; }  return result;}

list

result

1 2 3 4 5 6

0 0 0 0 2 1

i (=2) is still less than 6

Page 55: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

55

int[] list1 = new int[]{1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1);

public static int[] reverse(int[] list) { int[] result = new int[list.length];  for (int i = 0, j = result.length - 1; i < list.length; i++, j--) { result[j] = list[i]; }  return result;}

list

result

1 2 3 4 5 6

0 0 0 3 2 1

i = 2 and j = 3 Assign list[i] to

result[j]

Page 56: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

56

int[] list1 = new int[]{1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1);

public static int[] reverse(int[] list) { int[] result = new int[list.length];  for (int i = 0, j = result.length - 1; i < list.length; i++, j--) { result[j] = list[i]; }  return result;}

list

result

1 2 3 4 5 6

0 0 0 3 2 1

After this, i becomes 3 and j becomes 2

Page 57: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

57

int[] list1 = new int[]{1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1);

public static int[] reverse(int[] list) { int[] result = new int[list.length];  for (int i = 0, j = result.length - 1; i < list.length; i++, j--) { result[j] = list[i]; }  return result;}

list

result

1 2 3 4 5 6

0 0 0 3 2 1

i (=3) is still less than 6

Page 58: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

58

int[] list1 = new int[]{1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1);

public static int[] reverse(int[] list) { int[] result = new int[list.length];  for (int i = 0, j = result.length - 1; i < list.length; i++, j--) { result[j] = list[i]; }  return result;}

list

result

1 2 3 4 5 6

0 0 4 3 2 1

i = 3 and j = 2 Assign list[i] to

result[j]

Page 59: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

59

int[] list1 = new int[]{1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1);

public static int[] reverse(int[] list) { int[] result = new int[list.length];  for (int i = 0, j = result.length - 1; i < list.length; i++, j--) { result[j] = list[i]; }  return result;}

list

result

1 2 3 4 5 6

0 0 4 3 2 1

After this, i becomes 4 and j becomes 1

Page 60: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

60

int[] list1 = new int[]{1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1);

public static int[] reverse(int[] list) { int[] result = new int[list.length];  for (int i = 0, j = result.length - 1; i < list.length; i++, j--) { result[j] = list[i]; }  return result;}

list

result

1 2 3 4 5 6

0 0 4 3 2 1

i (=4) is still less than 6

Page 61: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

61

int[] list1 = new int[]{1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1);

public static int[] reverse(int[] list) { int[] result = new int[list.length];  for (int i = 0, j = result.length - 1; i < list.length; i++, j--) { result[j] = list[i]; }  return result;}

list

result

1 2 3 4 5 6

0 5 4 3 2 1

i = 4 and j = 1 Assign list[i] to

result[j]

Page 62: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

62

int[] list1 = new int[]{1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1);

public static int[] reverse(int[] list) { int[] result = new int[list.length];  for (int i = 0, j = result.length - 1; i < list.length; i++, j--) { result[j] = list[i]; }  return result;}

list

result

1 2 3 4 5 6

0 5 4 3 2 1

After this, i becomes 5 and j becomes 0

Page 63: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

63

int[] list1 = new int[]{1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1);

public static int[] reverse(int[] list) { int[] result = new int[list.length];  for (int i = 0, j = result.length - 1; i < list.length; i++, j--) { result[j] = list[i]; }  return result;}

list

result

1 2 3 4 5 6

0 5 4 3 2 1

i (=5) is still less than 6

Page 64: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

64

int[] list1 = new int[]{1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1);

public static int[] reverse(int[] list) { int[] result = new int[list.length];  for (int i = 0, j = result.length - 1; i < list.length; i++, j--) { result[j] = list[i]; }  return result;}

list

result

1 2 3 4 5 6

6 5 4 3 2 1

i = 5 and j = 0 Assign list[i] to

result[j]

Page 65: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

65

int[] list1 = new int[]{1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1);

public static int[] reverse(int[] list) { int[] result = new int[list.length];  for (int i = 0, j = result.length - 1; i < list.length; i++, j--) { result[j] = list[i]; }  return result;}

list

result

1 2 3 4 5 6

6 5 4 3 2 1

After this, i becomes 6 and j becomes -1

Page 66: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

66

int[] list1 = new int[]{1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1);

public static int[] reverse(int[] list) { int[] result = new int[list.length];  for (int i = 0, j = result.length - 1; i < list.length; i++, j--) { result[j] = list[i]; }  return result;}

list

result

1 2 3 4 5 6

6 5 4 3 2 1

i (=6) < 6 is false. So exit the loop

Page 67: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

67

int[] list1 = new int[]{1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1);

public static int[] reverse(int[] list) { int[] result = new int[list.length];  for (int i = 0, j = result.length - 1; i < list.length; i++, j--) { result[j] = list[i]; }  return result;}

list

result

1 2 3 4 5 6

6 5 4 3 2 1

Return result

list2

Page 68: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

68

Example: Counting Occurrence of Each Letter (CountLettersInArray.java) Generate 100 lowercase letters randomly and assign to an array of

characters. Count the occurrence of each letter in the array

Space required for the main method

char[] chars: ref

(a) Executing createArray in Line 6

Space required for the main method

char[] chars: ref

Heap

Array of 100 characters

Space required for the createArray method

char[] chars: ref

(b) After exiting createArray in Line 6

Heap

Array of 100 characters

Stack Stack

Page 69: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

69

Searching Arrays

Searching is the process of looking for a specific element in an array For example, discovering whether a certain score is

included in a list of scores Searching is a common task in computer

programming There are many algorithms and data structures

devoted to searching We will discuss two commonly used approaches

Linear search Binary search

Page 70: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

70

Linear Search

The linear search approach compares the key element, key, sequentially with each element in the array list

The method continues to do so until the key matches an element in the list or the list is exhausted without a match being found If a match is made, the linear search returns the

index of the element in the array that matches the key

If no match is found, the search returns -1

Page 71: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

71

Example: LinearSearch.java

public class LinearSearch { /** The method for finding a key in the list */ public static int linearSearch(int[] list, int key) { for (int i = 0; i < list.length; i++) if (key == list[i]) return i; return -1; } }

list

key Compare key with list[i] for i = 0, 1, …

[0] [1] [2] …

Page 72: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

72

Linear Search Animation

6 4 1 9 7 3 2 8

6 4 1 9 7 3 2 8

6 4 1 9 7 3 2 8

6 4 1 9 7 3 2 8

6 4 1 9 7 3 2 8

6 4 1 9 7 3 2 8

3

3

3

3

3

3

Key List

Page 73: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

73

/** The method for finding a key in the list */public static int linearSearch(int[] list, int key) { for (int i = 0; i < list.length; i++) if (key == list[i]) return i; return -1;}

See some results

int[] list = {1, 4, 4, 2, 5, -3, 6, 2};int i = linearSearch(list, 4); // returns 1int j = linearSearch(list, -4); // returns -1int k = linearSearch(list, -3); // returns 5

More Illustration

Page 74: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

74

Binary Search

For binary search to work, the elements in the array must already be ordered

Without loss of generality, we usually assume that the array is in ascending order E.g., 2 4 7 10 11 45 50 59 60 66 69 70 79

The binary search first compares the key with the element in the middle of the array

Page 75: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

75

Consider the following three cases: If the key is less than the middle element, you

only need to search the key in the first half of the array

If the key is equal to the middle element, the search ends with a match

If the key is greater than the middle element, you only need to search the key in the second half of the array

Page 76: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

76

Binary Search Animation

1 2 3 4 6 7 8 9

1 2 3 4 6 7 8 9

1 2 3 4 6 7 8 9

8

8

8

Key List

Page 77: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

77

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]

2 4 7 10 11 45 50 59 60 66 69 70 79

key is 11

key < 50

list

mid

[0] [1] [2] [3] [4] [5] key > 7

key == 11

high low

mid high low

list

[3] [4] [5]

mid high low

list

2 4 7 10 11 45

10 11 45

Page 78: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

78

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]

2 4 7 10 11 45 50 59 60 66 69 70 79

key is 54

key > 50

list

mid

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] key < 66

key < 59

high low

mid high low

list

[7] [8]

mid high low

list

59 60 66 69 70 79

59 60

[6] [7] [8]

high low

59 60

Page 79: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

79

Binary Search Program (BinarySearch.java) The binarySearch method returns the

index of the search key if it is contained in the list. Otherwise, it returns –insertion point – 1 The insertion point is the point at which the key

would be inserted into the list

Page 80: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

80

The Arrays.binarySearch API Method Due to its efficiency, binary search is frequently

used Java provides several overloaded API binarySearch methods for searching a key in an array of int, double, char, short, long, and float in the java.util.Arrays class

Example 1:int[] list = {2, 4, 7, 10, 11, 45, 50, 59, 60, 66,

69, 70, 79};

System.out.println("Index is " + java.util.Arrays.binarySearch(list, 11));

Returns 4

Page 81: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

81

Example 2:char[] chars = {'a', 'c', 'g', 'x', 'y', 'z'};

System.out.println("Index is " + java.util.Arrays.binarySearch(chars, 't'));

For the binarySearch method to work, the array must be pre-sorted in increasing order

Returns –4(insertion point is 3, so the return is -3-1)

Page 82: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

82

Sorting Arrays

Sorting, like searching, is also a common task in computer programming It would be used, for instance, if you wanted to

display the grades from the “Assigning Grades” example in alphabetical order

Many different algorithms have been developed for sorting

We introduce a simple, intuitive sorting algorithm in this lecture: Selection Sort

Page 83: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

83

Selection Sort

Selection sort finds the largest number in the list and places it last

It then finds the largest number remaining and places it next to last, and so on until the list contains only a single number

The following figure shows how to sort the list {2, 9, 5, 4, 8, 1, 6} using selection sort

Page 84: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

84

2 9 5 4 8 1 6

swap

Select 9 (the largest) and swap it with 6 (the last) in the list

2 6 5 4 8 1 9

swap

The number 9 now is in the correct position and thus no longer need to be considered.

2 6 5 4 1 8 9

swap

2 1 5 4 6 8 9

Select 8 (the largest) and swap it with 1 (the last) in the remaining list

The number 8 now is in the correct position and thus no longer need to be considered.

Select 6 (the largest) and swap it with 1 (the last) in the remaining list

The number 6 now is in the correct position and thus no longer need to be considered.

(Continued on next slide)

Page 85: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

85

2 1 5 4 6 8 9

swap

The number 6 now is in the correct position and thus no longer need to be considered.

2 1 4 5 6 8 9

4 is the largest and last in the list. No swap is necessary

2 1 4 5 6 8 9

swap

The number 4 now is in the correct position and thus no longer need to be considered.

1 2 4 5 6 8 9

Select 2 (the largest) and swap it with 1 (the last) in the remaining list

The number 2 now is in the correct position and thus no longer need to be considered.

Since there is only one number in the remaining list, sort is completed

Select 5 (the largest) and swap it with 4 (the last) in the remaining list

The number 5 now is in the correct position and thus no longer need to be considered.

Page 86: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

86

Selection Sort Animation

2 9 5 4 8 1 6

2 6 5 4 8 1 9

2 6 5 4 1 8 9

2 1 4 5 6 8 9

2 1 4 5 6 8 9

2 1 5 4 6 8 9

1 2 4 5 6 8 9

int[] myList = {2, 9, 5, 4, 8, 1, 6}; // Unsorted

Page 87: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

87

From Idea to Solution

for (int i = list.length - 1; i >= 1; i--) { select the largest element in list[0..i]; swap the largest with list[i], if necessary; // list[i] is in place // The next iteration applies on list[0..i-1]}

list[0] list[1] list[2] list[3] ... list[10]

list[0] list[1] list[2] list[3] ... list[9]

list[0] list[1] list[2] list[3] ... list[8]

list[0] list[1] list[2] list[3] ... list[7]

list[0]

...

Page 88: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

88

for (int i = list.length - 1; i >= 1; i--) { select the largest element in list[0..i]; swap the largest with list[i], if necessary; // list[i] is in place // The next iteration applies on list[0..i-1]}

Expand // Find the maximum in the list[0..i] double currentMax = list[0]; int currentMaxIndex = 0;  for (int j = 1; j <= i; j++) { if (currentMax < list[j]) { currentMax = list[j]; currentMaxIndex = j; } }

Page 89: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

89

// Swap list[i] with list[currentMaxIndex] if necessary;if (currentMaxIndex != i) { list[currentMaxIndex] = list[i]; list[i] = currentMax;}

for (int i = list.length - 1; i >= 1; i--) { select the largest element in list[0..i]; swap the largest with list[i], if necessary; // list[i] is in place // The next iteration applies on list[0..i-1]}

Expand

Page 90: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

90

/** The method for sorting the numbers */public static void selectionSort(double[] list) { for (int i = list.length - 1; i >= 1; i--) { // Find the maximum in the list[0..i] double currentMax = list[0]; int currentMaxIndex = 0;  for (int j = 1; j <= i; j++) { if (currentMax < list[j]) { currentMax = list[j]; currentMaxIndex = j; } }  // Swap list[i] with list[currentMaxIndex] if

necessary; if (currentMaxIndex != i) { list[currentMaxIndex] = list[i]; list[i] = currentMax; } }}

Invoke it:selectionSort(yourList)

Page 91: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

91

Selection Sort Code

Selection Sort source code SelectionSort.java

Page 92: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

92

The Arrays.sort Method

Java provides several overloaded API sort methods for sorting an array of int, double, char, short, long, and float in the java.util.Arrays class

For example, the following code sorts an array of numbers and an array of charactersdouble[] numbers = {6.0, 4.4, 1.9, 2.9, 3.4, 3.5};

java.util.Arrays.sort(numbers);

 char[] chars = {'a', 'A', '4', 'F', 'D', 'P'};

java.util.Arrays.sort(chars);

Page 93: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

93

Two-dimensional Arrays

Syntax:// Declare array refVardataType[][] refVar;

// Create array and assign its reference to variablerefVar = new dataType[10][10];

// Combine declaration and creation in one statementdataType[][] refVar = new dataType[10][10];

// Alternative syntaxdataType refVar[][] = new dataType[10][10];

Page 94: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

94

Example: Declaring Variables of Two-dimensional Arrays and Creating Two-dimensional Arrays int[][] matrix = new int[10][10]; orint matrix[][] = new int[10][10];

matrix[0][0] = 3;

for (int i = 0; i < matrix.length; i++) for (int j = 0; j < matrix[i].length; j++) matrix[i][j] = (int)(Math.random() * 1000);

double[][] x;

Page 95: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

95

Two-dimensional Array Illustration

7

0 1 2

0 1 2

int[][] array = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12} };

1

2

3

4

5

6

8

9

10

11

12

0 1 2 3 4

0

7

0 1 2 3 4

1 2 3 4

0 1 2 3 4 matrix[2][1] = 7;

matrix = new int[5][5];

array.length? 4

array[0].length? 3

matrix.length? 5

matrix[0].length? 5

Page 96: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

96

Declaring, Creating, and Initializing Using Shorthand Notations You can also use an array initializer to declare,

create and initialize a two-dimensional array. For example,

int[][] array = new int[4][3];

array[0][0] = 1; array[0][1] = 2; array[0][2] = 3;

array[1][0] = 4; array[1][1] = 5; array[1][2] = 6;

array[2][0] = 7; array[2][1] = 8; array[2][2] = 9;

array[3][0] = 10; array[3][1] = 11; array[3][2] = 12;

int[][] array = {

{1, 2, 3},

{4, 5, 6},

{7, 8, 9},

{10, 11, 12}

};

Same as

Page 97: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

97

Lengths of Two-dimensional Arraysint[][] x = new int[3][4];

x

x[0]

x[1]

x[2]

x[0][0] x[0][1] x[0][2] x[0][3] x[1][0] x[1][1] x[1][2] x[1][3] x[2][0] x[2][1] x[2][2] x[2][3]

x.length is 3

x[0].length is 4

x[1].length is 4

x[2].length is 4

Page 98: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

98

int[][] array = {

{1, 2, 3},

{4, 5, 6},

{7, 8, 9},

{10, 11, 12}

};

array.length

array[0].length

array[1].length

array[2].length

array[3].length

If you use array[4].length, you get an error message: ArrayIndexOutOfBoundsException

Page 99: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

99

Example: Grading Multiple-Choice Test (GradeExam.java) Objective: write a program that grades multiple-

choice test

A B A C C D E E A D D B A B C A E E A D E D D A C B E E A D C B A E D C E E A D A B D C C D E E A D B B E C C D E E A D B B A C C D E E A D E B E C C D E E A D

0 1 2 3 4 5 6 7 8 9

Student 0 Student 1 Student 2 Student 3 Student 4 Student 5 Student 6 Student 7

Students’ Answers to the Questions:

D B D C C D A E A D

0 1 2 3 4 5 6 7 8 9

Key

Key to the Questions:

Page 100: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

100

Example: Computing Taxes Using Arrays (ComputeTax.java) Further improve “Computing Taxes with

Methods” using arrays Pervious example is re-written to use arrays to

store tax rates and brackets

Page 101: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

101

6000 12000 6000 10000

27950 46700 23350 37450

67700 112850 56425 96745

141250 171950 85975 156600

307050 307050 153525 307050

10%

15%

27%

30%

35%

38.6%

Refine the table

Page 102: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

102

6000 27950 67700 141250 307050

12000 46700 112850 171950 307050

6000 23350 56425 85975 153525

10000 37450 96745 156600 307050

Rotate

Single filer

Married jointly

Married separately

Head of household

6000 12000 6000 10000

27950 46700 23350 37450

67700 112850 56425 96745

141250 171950 85975 156600

307050 307050 153525 307050

Reorganize the table

Page 103: Liang, Introduction to Java Programming1 Arrays Gang Qian Department of Computer Science University of Central Oklahoma.

103

int[][] brackets = {

{6000, 27950, 67700, 141250, 307050}, // Single filer

{12000, 46700, 112850, 171950, 307050}, // Married jointly

{6000, 23350, 56425, 85975, 153525}, // Married separately

{10000, 37450, 96700, 156600, 307050} // Head of household

};

10%

15%

27%

30%

35%

38.6%double[] rates = {0.10, 0.15, 0.27, 0.30, 0.35, 0.386};

6000 27950 67700 141250 307050

12000 46700 112850 171950 307050

6000 23350 56425 85975 153525

10000 37450 96745 156600 307050

Single filer

Married jointly

Married separately

Head of household

Declare Two Arrays


Recommended