0

06slide

226

Published on

Published in: Technology, News & Politics
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
226
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
23
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "06slide"

  1. 1. Chapter 6 ArraysLiang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 1
  2. 2. Opening ProblemRead one hundred numbers, compute theiraverage, and find out how many numbers areabove the average. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 2
  3. 3. SolutionAnalyzeNumbers Run Run with prepared input Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 3
  4. 4. Objectives To describe why arrays are necessary in programming (§6.1). To declare array reference variables and create arrays (§§6.2.1–6.2.2). To initialize obtain array size using arrayRefVar.length and know default the values in an array (§6.2.3). To access array elements using indexed variables (§6.2.4). To declare, create, and initialize an array using an array initializer (§6.2.5). To program common array operations (displaying arrays, summing all elements, finding the minimum and maximum elements, random shuffling, and shifting elements) (§6.2.6). To simplify programming using the for-eachfor-each loops (§6.2.7). To apply arrays in the application development (LottoNumbers, DeckOfCards) (§§6.3–6.4). To copy contents from one array to another (§6.5). To develop and invoke methods with array arguments and return values (§§6.6–6.78). To define a method with a variable-length argument list (§6.89). To search elements using the linear (§6.910.1) or binary (§6.910.2) search algorithm. To sort an array using the selection sort approach (§6.1011.1). To sort an array using the insertion sort approach (§6.1011.2). To use the methods in the java.util.Arrays class (§6.1112). Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 4
  5. 5. Introducing ArraysArray is a data structure that represents a collection of thesame types of data. double[] myList = new double[10]; myList reference myList[0] 5.6 myList[1] 4.5 Array reference myList[2] 3.3 variable myList[3] 13.2 myList[4] 4 Array element at myList[5] 34.33 Element value index 5 myList[6] 34 myList[7] 45.45 myList[8] 99.993 myList[9] 11123 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 5
  6. 6. Declaring Array Variables datatype[] arrayRefVar; Example: double[] myList; datatype arrayRefVar[]; // This style is allowed, but not preferred Example: double myList[]; Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 6
  7. 7. Creating ArraysarrayRefVar = 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. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 7
  8. 8. Declaring and Creating in One Step datatype[] arrayRefVar = new datatype[arraySize]; double[] myList = new double[10]; datatype arrayRefVar[] = new datatype[arraySize]; double myList[] = new double[10]; Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 8
  9. 9. The Length of an ArrayOnce an array is created, its size is fixed. It cannot bechanged. You can find its size using arrayRefVar.lengthFor example, myList.length returns 10 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 9
  10. 10. Default ValuesWhen an array is created, its elements areassigned the default value of 0 for the numeric primitive data types, u0000 for char types, and false for boolean types. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 10
  11. 11. Indexed VariablesThe array elements are accessed through the index. Thearray indices are 0-based, i.e., it starts from 0 toarrayRefVar.length-1. In the example in Figure 6.1,myList holds ten double values and the indices arefrom 0 to 9.Each element in the array is represented using thefollowing syntax, known as an indexed variable: arrayRefVar[index]; Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 11
  12. 12. Using Indexed VariablesAfter an array is created, an indexed variable canbe used in the same way as a regular variable.For example, the following code adds the valuein myList[0] and myList[1] to myList[2]. myList[2] = myList[0] + myList[1]; Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 12
  13. 13. Array Initializers Declaring, creating, initializing in one step: double[] myList = {1.9, 2.9, 3.4, 3.5};This shorthand syntax must be in one statement. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 13
  14. 14. Declaring, creating, initializing Using the Shorthand Notationdouble[] myList = {1.9, 2.9, 3.4, 3.5};This shorthand notation is equivalent to thefollowing statements:double[] myList = new double[4];myList[0] = 1.9;myList[1] = 2.9;myList[2] = 3.4;myList[3] = 3.5; Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 14
  15. 15. CAUTIONUsing the shorthand notation, youhave to declare, create, and initializethe array all in one statement.Splitting it would cause a syntaxerror. For example, the following iswrong: double[] myList; myList = {1.9, 2.9, 3.4, 3.5}; Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 15
  16. 16. animation Trace Program with Arrays Declare array variable values, create an array, and assign its reference to valuespublic class Test { public static void main(String[] args) { After the array is created int[] values = new int[5]; 0 0 for (int i = 1; i < 5; i++) { 1 0 values[i] = i + values[i-1]; 2 0 } 3 0 values[0] = values[1] + values[4]; 4 0 }} Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 16
  17. 17. animation Trace Program with Arrays i becomes 1public class Test { public static void main(String[] args) { After the array is created int[] values = new int[5]; for (int i = 1; i < 5; i++) { 0 0 values[i] = i + values[i-1]; 1 0 0 } 2 3 0 values[0] = values[1] + values[4]; 0 4 }} Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 17
  18. 18. animation Trace Program with Arrays i (=1) is less than 5public class Test { public static void main(String[] args) { After the array is created int[] values = new int[5]; for (int i = 1; i < 5; i++) { 0 0 values[i] = i + values[i-1]; 1 0 } 2 0 values[0] = values[1] + values[4]; 3 0 4 0 }} Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 18
  19. 19. animation Trace Program with Arrays After this line is executed, value[1] is 1public class Test { public static void main(String[] args) { After the first iteration int[] values = new int[5]; 0 0 for (int i = 1; i < 5; i++) { 1 1 values[i] = i + values[i-1]; 2 0 } 3 0 values[0] = values[1] + values[4]; 4 0 }} Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 19
  20. 20. animation Trace Program with Arrays After i++, i becomes 2 public class Test { public static void main(String[] args) { int[] values = new int[5]; After the first iteration for (int i = 1; i < 5; i++) { 0 0 values[i] = i + values[i-1]; 1 1 } 2 0 3 0 values[0] = values[1] + values[4]; 4 0 } } Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 20
  21. 21. animation Trace Program with Arrays i (= 2) is less than 5 public class Test { public static void main(String[] args) { int[] values = new int[5]; After the first iteration for (int i = 1; i < 5; i++) { 0 0 values[i] = i + values[i-1]; 1 1 } 2 0 3 0 values[0] = values[1] + 4 0 values[4]; } } Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 21
  22. 22. animation Trace Program with Arrays After this line is executed, values[2] is 3 (2 + 1)public class Test { public static void main(String[] args) { After the second iteration int[] values = new int[5]; 0 0 for (int i = 1; i < 5; i++) { 1 1 values[i] = i + values[i-1]; 2 3 } 3 0 values[0] = values[1] + values[4]; 4 0 }} Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 22
  23. 23. animation Trace Program with Arrays After this, i becomes 3.public class Test { public static void main(String[] args) { After the second iteration int[] values = new int[5]; 0 0 for (int i = 1; i < 5; i++) { 1 1 values[i] = i + values[i-1]; 2 3 } 3 0 values[0] = values[1] + values[4]; 4 0 }} Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 23
  24. 24. animation Trace Program with Arrays i (=3) is still less than 5.public class Test { public static void main(String[] args) { After the second iteration int[] values = new int[5]; 0 0 for (int i = 1; i < 5; i++) { 1 1 values[i] = i + values[i-1]; 2 3 } 3 0 values[0] = values[1] + values[4]; 4 0 }} Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 24
  25. 25. animation Trace Program with Arrays After this line, values[3] becomes 6 (3 + 3)public class Test { public static void main(String[] args) { After the third iteration int[] values = new int[5]; 0 0 for (int i = 1; i < 5; i++) { 1 1 values[i] = i + values[i-1]; 2 3 } 3 6 values[0] = values[1] + values[4]; 4 0 }} Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 25
  26. 26. animation Trace Program with Arrays After this, i becomes 4public class Test { public static void main(String[] args) { After the third iteration int[] values = new int[5]; 0 0 for (int i = 1; i < 5; i++) { 1 1 values[i] = i + values[i-1]; 2 3 } 3 6 values[0] = values[1] + values[4]; 4 0 }} Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 26
  27. 27. animation Trace Program with Arrays i (=4) is still less than 5public class Test { public static void main(String[] args) { After the third iteration int[] values = new int[5]; 0 0 for (int i = 1; i < 5; i++) { 1 1 values[i] = i + values[i-1]; 2 3 } 3 6 values[0] = values[1] + values[4]; 4 0 }} Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 27
  28. 28. animation Trace Program with Arrays After this, values[4] becomes 10 (4 + 6)public class Test { public static void main(String[] args) { After the fourth iteration int[] values = new int[5]; 0 0 for (int i = 1; i < 5; i++) { 1 1 values[i] = i + values[i-1]; 2 3 } 3 6 values[0] = values[1] + values[4]; 4 10 }} Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 28
  29. 29. animation Trace Program with Arrays After i++, i becomes 5 public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { After the fourth iteration values[i] = i + values[i-1]; } 0 0 values[0] = values[1] + values[4]; 1 1 } 2 3 } 3 6 4 10 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 29
  30. 30. animation Trace Program with Arrays i ( =5) < 5 is false. Exit the loop public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { After the fourth iteration values[i] = i + values[i-1]; 0 } 0 1 1 values[0] = values[1] + values[4]; 2 3 } 3 6 } 4 10 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 30
  31. 31. animation Trace Program with Arrays After this line, values[0] is 11 (1 + 10)public class Test { public static void main(String[] args) { int[] values = new int[5]; for (int i = 1; i < 5; i++) { 0 11 values[i] = i + values[i-1]; 1 1 } 2 3 values[0] = values[1] + values[4]; 3 6 } 4 10} Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 31
  32. 32. Processing ArraysSee the examples in the text.1. (Initializing arrays with input values)2. (Initializing arrays with random values)3. (Printing arrays)4. (Summing all elements)5. (Finding the largest element)6. (Finding the smallest index of the largest element)7. (Random shuffling)8. (Shifting elements) Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 32
  33. 33. Initializing arrays with input valuesjava.util.Scanner input = new java.util.Scanner(System.in);System.out.print("Enter " + myList.length + " values: ");for (int i = 0; i < myList.length; i++) myList[i] = input.nextDouble(); Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 33
  34. 34. Initializing arrays with random valuesfor (int i = 0; i < myList.length; i++) { myList[i] = Math.random() * 100;} Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 34
  35. 35. Printing arraysfor (int i = 0; i < myList.length; i++) { System.out.print(myList[i] + " ");} Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 35
  36. 36. Summing all elementsdouble total = 0;for (int i = 0; i < myList.length; i++) { total += myList[i];} Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 36
  37. 37. Finding the largest elementdouble max = myList[0];for (int i = 1; i < myList.length; i++) { if (myList[i] > max) max = myList[i];} Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 37
  38. 38. Random shufflingfor (int i = 0; i < myList.length; i++) { myList // Generate an index j randomly i [0] int index = (int)(Math.random() [1] * myList.length); . swap // Swap myList[i] with myList[index] . double temp = myList[i]; . myList[i] = myList[index]; [index] myList[index] = temp; A random index} Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 38
  39. 39. Shifting Elementsdouble temp = myList[0]; // Retain the first element// Shift elements left myListfor (int i = 1; i < myList.length; i++) { myList[i - 1] = myList[i];}// Move the first element to fill in the last positionmyList[myList.length - 1] = temp; Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 39
  40. 40. Enhanced for Loop (for-each loop)JDK 1.5 introduced a new for loop that enables you to traverse the complete arraysequentially without using an index variable. For example, the following codedisplays all elements in the array myList: for (double value: myList) System.out.println(value);In general, the syntax is for (elementType value: arrayRefVar) { // Process the value }You still have to use an index variable if you wish to traverse the array in adifferent order or change the elements in the array. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 40
  41. 41. Problem: Lotto NumbersSuppose you play the Pick-10 lotto. Each ticket has10 unique numbers ranging from 1 to 99. You buya lot of tickets. You like to have your tickets tocover all numbers from 1 to 99. Write a programthat reads the ticket numbers from a file and checkswhether all numbers are covered. Assume the lastnumber in the file is 0.Lotto Numbers Sample Data LottoNumbers Run Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 41
  42. 42. Problem: Lotto NumbersisCovered isCovered isCovered isCovered isCovered false [0] true [0] true [0] true [0] true [0] [1] false [1] false [1] true [1] true [1] true[2] false [2] false [2] false [2] true [2] true [3] false [3] false [3] false [3] false [3] false . . . . . . . . . . . . . . .[97] [97] false [97] false [97] false [97] false false[98] [98] false [98] false [98] false [98] true false (a) (b) (c) (d) (e) Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 42
  43. 43. Problem: Deck of CardsThe problem is to write a program that picks four cardsrandomly from a deck of 52 cards. All the cards can berepresented using an array named deck, filled with initialvalues 0 to 51, as follows: int[] deck = new int[52]; // Initialize cards for (int i = 0; i < deck.length; i++) deck[i] = i; DeckOfCards Run Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 43
  44. 44. Problem: Deck of Cards, cont. deck deck 0 [0] 0 [0] 6 Card number 6 is the . . . . 13 Spades (♠) . . [1] 48 7 (6 % 13 = 6) of [2] 11 Spades (7 / 13 is 0) . . . [3] 2412 [12] 12 Card number 48 is the [4] .13 [13] 13 10 (48 % 13 = 9) of [5] . . . . Clubs (48 / 13 is 3) . 13 Hearts (♥) . . . . . . . . . Card number 11 is the Random shuffle . .25 [25] 25 Queen (11 % 13 = 11) of [25] .26 [26] 26 Spades (11 / 13 is 0) [26] . . . . 13 Diamonds (♦) . . . . . Card number 24 is the . . . . . Queen (24 % 13 = 11) of . .38 [38] 38 Hearts (24 / 13 is 1) [38] .39 [39] 39 [39] . . . . . . . 13 Clubs (♣) . . . . . . . . .51 [51] 51 [51] . Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 44
  45. 45. Problem: Deck of Cards, cont. 0 Ace 0 Spades 1 2 1 Hearts .cardNumber / 13 = 2 Diamonds cardNumber % 13 = . 3 Clubs 10 Jack 11 Queen 12 KingGUI Demo (picking four cards) DeckOfCards Run Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 45
  46. 46. Problem: Deck of CardsThis problem builds a foundation for future more interesting andrealistic applications:See Exercise 22.15. Run 24 Point Game Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 46
  47. 47. Copying ArraysOften, in a program, you need to duplicate an array or a part of anarray. In such cases you could attempt to use the assignment statement(=), as follows:list2 = list1; Before the assignment After the assignment list2 = list1; list2 = list1; list1 list1 Contents Contents of list1 of list1 list2 list2 Contents Contents of list2 of list2 Garbage Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 47
  48. 48. Copying ArraysUsing 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]; Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 48
  49. 49. The arraycopy Utilityarraycopy(sourceArray, src_pos, targetArray, tar_pos, length);Example:System.arraycopy(sourceArray, 0, targetArray, 0, sourceArray.length); Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 49
  50. 50. Passing Arrays to Methodspublic static void printArray(int[] array) { for (int i = 0; i < array.length; i++) { System.out.print(array[i] + " "); }} Invoke the method int[] list = {3, 1, 2, 6, 4, 2}; printArray(list); Invoke the method printArray(new int[]{3, 1, 2, 6, 4, 2}); Anonymous array Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 50
  51. 51. Anonymous ArrayThe statement printArray(new int[]{3, 1, 2, 6, 4, 2});creates an array using the following syntax: new dataType[]{literal0, literal1, ..., literalk};There is no explicit reference variable for the array.Such array is called an anonymous array. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 51
  52. 52. Pass By ValueJava uses pass by value to pass arguments to a method. Thereare important differences between passing a value of variablesof primitive data types and passing arrays. For a parameter of a primitive type value, the actual value ispassed. Changing the value of the local parameter inside themethod does not affect the value of the variable outside themethod. For a parameter of an array type, the value of the parametercontains a reference to an array; this reference is passed to themethod. Any changes to the array that occur inside the methodbody will affect the original array that was passed as theargument. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 52
  53. 53. Simple Examplepublic class Test { public static void main(String[] args) { int x = 1; // x represents an int value int[] y = new int[10]; // y represents 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; // Assign a new value to number numbers[0] = 5555; // Assign a new value to numbers[0] }} Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 53
  54. 54. Call Stack Stack Heap Space required for method m int[] numbers:reference The arrays are int number: 1 0 stored in a 0 heap.Space required for themain method int[] y: reference Array of int x: 1 0 ten int values isWhen invoking m(x, y), the values of x and y arepassed to number and numbers. Since y contains thereference value to the array, numbers now containsthe same reference value to the same array. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 54
  55. 55. Call Stack Stack Heap Space required for method m int[] numbers:reference The arrays are int number: 1001 5555 stored in a 0 heap.Space required for themain method int[] y: reference Array of ten int int x: 1 values is stored here 0When invoking m(x, y), the values of x and y arepassed to number and numbers. Since y contains thereference value to the array, numbers now containsthe same reference value to the same array. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 55
  56. 56. Heap Heap The arrays are 5555 stored in a 0 heap. Space required for the main method int[] y: reference int x: 1 0The JVM stores the array in an area of memory,called heap, which is used for dynamic memoryallocation where blocks of memory are allocated andfreed in an arbitrary order. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 56
  57. 57. Passing Arrays as Arguments Objective:Demonstrate differences of passing primitive data type variables and array variables. TestPassArray Run Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 57
  58. 58. Example, cont. Stack Heap Stack Space required for the Space required for the swapFirstTwoInArray swap method method n2: 2 int[] array reference n1: 1 Space required for the Space required for the main method main method int[] a reference int[] a reference a[1]: 2 a[0]: 1Invoke swap(int n1, int n2). Invoke swapFirstTwoInArray(int[] array).The primitive type values in The arrays are The reference value in a is passed to thea[0] and a[1] are passed to the stored in a swapFirstTwoInArray method.swap method. heap. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 58
  59. 59. Returning an Array from a Methodpublic 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]; } list return result;} result int[] list1 = {1, 2, 3, 4, 5, 6}; int[] list2 = reverse(list1); Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 59
  60. 60. animation Trace the reverse Methodint[] list1 = {1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1); Declare result and create array 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 1 2 3 4 5 6 result 0 0 0 0 0 0 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 60
  61. 61. animation Trace the reverse Method, cont.int[] list1 = {1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1); i = 0 and j = 5 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 1 2 3 4 5 6 result 0 0 0 0 0 0 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 61
  62. 62. animation Trace the reverse Method, cont.int[] list1 = {1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1); i (= 0) is less than 6 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 1 2 3 4 5 6 result 0 0 0 0 0 0 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 62
  63. 63. animation Trace the reverse Method, cont.int[] list1 = {1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1); i = 0 and j = 5 public static int[] reverse(int[] list) { Assign list[0] to result[5] 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 1 2 3 4 5 6 result 0 0 0 0 0 1 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 63
  64. 64. animation Trace the reverse Method, cont.int[] list1 = {1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1); After this, i becomes 1 and j public static int[] reverse(int[] list) { becomes 4 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 1 2 3 4 5 6 result 0 0 0 0 0 1 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 64
  65. 65. animation Trace the reverse Method, cont.int[] list1 = {1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1); i (=1) is less than 6 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 1 2 3 4 5 6 result 0 0 0 0 0 1 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 65
  66. 66. animation Trace the reverse Method, cont.int[] list1 = {1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1); i = 1 and j = 4 public static int[] reverse(int[] list) { Assign list[1] to result[4] 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 1 2 3 4 5 6 result 0 0 0 0 2 1 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 66
  67. 67. animation Trace the reverse Method, cont.int[] list1 = {1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1); After this, i becomes 2 and public static int[] reverse(int[] list) { j becomes 3 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 1 2 3 4 5 6 result 0 0 0 0 2 1 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 67
  68. 68. animation Trace the reverse Method, cont.int[] list1 = {1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1); i (=2) is still less than 6 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 1 2 3 4 5 6 result 0 0 0 0 2 1 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 68
  69. 69. animation Trace the reverse Method, cont.int[] list1 = {1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1); i = 2 and j = 3 public static int[] reverse(int[] list) { Assign list[i] to result[j] 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 1 2 3 4 5 6 result 0 0 0 3 2 1 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 69
  70. 70. animation Trace the reverse Method, cont.int[] list1 = {1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1); After this, i becomes 3 and public static int[] reverse(int[] list) { j becomes 2 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 1 2 3 4 5 6 result 0 0 0 3 2 1 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 70
  71. 71. animation Trace the reverse Method, cont.int[] list1 = {1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1); i (=3) is still less than 6 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 1 2 3 4 5 6 result 0 0 0 3 2 1 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 71
  72. 72. animation Trace the reverse Method, cont.int[] list1 = {1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1); i = 3 and j = 2 public static int[] reverse(int[] list) { Assign list[i] to result[j] 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 1 2 3 4 5 6 result 0 0 4 3 2 1 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 72
  73. 73. animation Trace the reverse Method, cont.int[] list1 = {1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1); After this, i becomes 4 and public static int[] reverse(int[] list) { j becomes 1 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 1 2 3 4 5 6 result 0 0 4 3 2 1 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 73
  74. 74. animation Trace the reverse Method, cont.int[] list1 = {1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1); i (=4) is still less than 6 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 1 2 3 4 5 6 result 0 0 4 3 2 1 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 74
  75. 75. animation Trace the reverse Method, cont.int[] list1 = {1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1); i = 4 and j = 1 public static int[] reverse(int[] list) { Assign list[i] to result[j] 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 1 2 3 4 5 6 result 0 5 4 3 2 1 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 75
  76. 76. animation Trace the reverse Method, cont.int[] list1 = {1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1); After this, i becomes 5 and public static int[] reverse(int[] list) { j becomes 0 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 1 2 3 4 5 6 result 0 5 4 3 2 1 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 76
  77. 77. animation Trace the reverse Method, cont.int[] list1 = {1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1); i (=5) is still less than 6 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 1 2 3 4 5 6 result 0 5 4 3 2 1 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 77
  78. 78. animation Trace the reverse Method, cont.int[] list1 = {1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1); i = 5 and j = 0 public static int[] reverse(int[] list) { Assign list[i] to result[j] 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 1 2 3 4 5 6 result 6 5 4 3 2 1 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 78
  79. 79. animation Trace the reverse Method, cont.int[] list1 = {1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1); After this, i becomes 6 and public static int[] reverse(int[] list) { j becomes -1 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 1 2 3 4 5 6 result 6 5 4 3 2 1 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 79
  80. 80. animation Trace the reverse Method, cont.int[] list1 = {1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1); i (=6) < 6 is false. So exit public static int[] reverse(int[] list) { the loop. 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 1 2 3 4 5 6 result 6 5 4 3 2 1 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 80
  81. 81. animation Trace the reverse Method, cont.int[] list1 = {1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1); Return result 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 1 2 3 4 5 6 list2 result 6 5 4 3 2 1 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 81
  82. 82. Problem: Counting Occurrence of Each Letter Generate 100 lowercase (a) Executing createArray in Line 6 (b) After exiting createArray in Line 6 letters randomly and assign Stack Heap Stack Heap to an array of characters. Space required for the createArray method Array of 100 Array of 100 characters characters char[] chars: ref Count the occurrence of each Space required for the main method Space required for the main method letter in the array. char[] chars: ref char[] chars: ref CountLettersInArray Run Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 82
  83. 83. Searching ArraysSearching is the process of looking for a specific element inan array; for example, discovering whether a certain score isincluded in a list of scores. Searching is a common task incomputer programming. There are many algorithms anddata structures devoted to searching. In this section, twocommonly used approaches are discussed, linear search andbinary search.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]) [0] [1] [2] … return i; list return -1; } key Compare key with list[i] for i = 0, 1, …} Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 83
  84. 84. Linear SearchThe linear search approach compares the keyelement, key, sequentially with each element inthe array list. The method continues to do sountil the key matches an element in the list orthe list is exhausted without a match beingfound. If a match is made, the linear searchreturns the index of the element in the arraythat matches the key. If no match is found, thesearch returns -1. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 84
  85. 85. animation Linear Search Animation Key List 3 6 4 1 9 7 3 2 8 3 6 4 1 9 7 3 2 8 3 6 4 1 9 7 3 2 8 3 6 4 1 9 7 3 2 8 3 6 4 1 9 7 3 2 8 3 6 4 1 9 7 3 2 8 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 85
  86. 86. animation Linear Search Animationhttp://www.cs.armstrong.edu/liang/animation/LinearSearchAnimation.html Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 86
  87. 87. From Idea to Solution/** 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;}Trace the methodint[] 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 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 87
  88. 88. Binary SearchFor binary search to work, the elements in thearray must already be ordered. Without loss ofgenerality, assume that the array is inascending order. e.g., 2 4 7 10 11 45 50 59 60 66 69 70 79The binary search first compares the key withthe element in the middle of the array. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 88
  89. 89. Binary Search, cont.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. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 89
  90. 90. animation Binary Search Key List 8 1 2 3 4 6 7 8 9 8 1 2 3 4 6 7 8 9 8 1 2 3 4 6 7 8 9 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 90
  91. 91. animation Binary Search Animationhttp://www.cs.armstrong.edu/liang/animation/BinarySearchAnimation.html Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 91
  92. 92. Binary Search, cont.key is 11 low mid highkey < 50 [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] list 2 4 7 10 11 45 50 59 60 66 69 70 79 low mid high [0] [1] [2] [3] [4] [5]key > 7 list 2 4 7 10 11 45 low mid high [3] [4] [5]key == 11 list 10 11 45 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 92
  93. 93. key is 54 Binary Search, cont. low mid highkey > 50 [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] list 2 4 7 10 11 45 50 59 60 66 69 70 79 low mid high [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]key < 66 list 59 60 66 69 70 79 low mid high [7] [8]key < 59 list 59 60 low high [6] [7] [8] 59 60 Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 93
  94. 94. Binary Search, cont.The binarySearch method returns the index of theelement in the list that matches the search key if itis contained in the list. Otherwise, it returns-insertion point - 1.The insertion point is the point at which the keywould be inserted into the list. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 94
  95. 95. From Idea to Soluton/** Use binary search to find the key in the list */public static int binarySearch(int[] list, int key) { int low = 0; int high = list.length - 1; while (high >= low) { int mid = (low + high) / 2; if (key < list[mid]) high = mid - 1; else if (key == list[mid]) return mid; else low = mid + 1; } return -1 - low;} Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 95
  96. 96. The Arrays.binarySearch MethodSince binary search is frequently used in programming, Java provides severaloverloaded binarySearch methods for searching a key in an array of int, double,char, short, long, and float in the java.util.Arrays class. For example, thefollowing code searches the keys in an array of numbers and an array ofcharacters. 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)); Return is 4 char[] chars = {a, c, g, x, y, z}; System.out.println("Index is " + java.util.Arrays.binarySearch(chars, t)); Return is –4 (insertion point is 3, so return is -3-1)For the binarySearch method to work, the array must be pre-sorted in increasingorder. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 96
  97. 97. Sorting ArraysSorting, like searching, is also a common task incomputer programming. Many different algorithmshave been developed for sorting. This sectionintroduces two simple, intuitive sorting algorithms:selection sort and insertion sort. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 97
  98. 98. Selection SortSelection sort finds the smallest number in the list and places it first. It then findsthe smallest number remaining and places it second, and so on until the listcontains only a single number. swap Select 1 (the smallest) and swap it 2 9 5 4 8 1 6 with 2 (the first) in the list swap The number 1 is now in the Select 2 (the smallest) and swap it 1 9 5 4 8 2 6 correct position and thus no with 9 (the first) in the remaining longer needs to be considered. list swap The number 2 is now in the Select 4 (the smallest) and swap it 1 2 5 4 8 9 6 correct position and thus no with 5 (the first) in the remaining longer needs to be considered. list The number 6 is now in the 5 is the smallest and in the right 1 2 4 5 8 9 6 correct position and thus no position. No swap is necessary longer needs to be considered. swap The number 5 is now in the Select 6 (the smallest) and swap it 1 2 4 5 8 9 6 correct position and thus no with 8 (the first) in the remaining longer needs to be considered. list swap The number 6 is now in the Select 8 (the smallest) and swap it 1 2 4 5 6 9 8 correct position and thus no with 9 (the first) in the remaining longer needs to be considered. list The number 8 is now in the Since there is only one element 1 2 4 5 6 8 9 correct position and thus no remaining in the list, sort is longer needs to be considered. completed Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 98
  99. 99. animation Selection Sort Animationhttp://www.cs.armstrong.edu/liang/animation/SelectionSortAnimation.html Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 99
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×