Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Arrays Pepper What is an Array • A box that holds many of the exact same type in mini-boxes • A number points to the mini-box • The number starts at 0 • String is an array • Ex: Array of money earned in the top row of a Jeopardy board: 100 -100 0 200 300 0 0 0 1 2 3 4 5 6 Defining an Array 100 -100 0 200 300 0 0 0 1 2 3 4 5 6 int[] intJeopardy = new int[7] • 6 is the highest subscript • Array holds 7 items [called its length] • Note the number used to create it is the length – 1 • This would create the exact same array, plus put in initial values: int[] intJeopardy = {0,0,0,0,0,0,0} Getting to an Array mini-box 100 -100 0 200 300 0 0 0 1 2 3 4 5 6 • x = intJeopardy[1] ; means x will get the value -100 • intJeopardy[3] = 500; means the 200 will change to 500 • for (int intCount = 0 ; intCount<= 6; intCount++){ intJeopardy[intCount] = 100; } means every value will change to 100 • intJeopardy[7] will CRASH • (reminder: create this array with: int[] intJeopardy = new int[7]) Getting to an Array mini-box 100 -100 0 200 300 0 0 0 1 2 3 4 5 6 What will the box look like after these statements: intX = 3; intJeopardy[1] = 500; intJeopardy[4] = intX; intJeopardy[intX] = 70; intJeopardy[2+intX] = 600; intJeopardy[6] = intX+5; Create your own Array In BlueJ Set up an intJeopardy array with 7 elements and set some values, and then show the values of those elements by printing them: Put 600 in the first box Put 100 in the 4th box (box 3) Create your own Array Solution In BlueJ Set up an intJeopardy array with 7 elements and set some values, and then show the values of those elements by printing them: int [] intJeopardy = new int[7] intJeopardy[3] = 100 intJeopardy[0] = 600 System.out.println( intJeopardy[3] + “ is the value in box 3”] System.out.println( intJeopardy[0] + “ is the value in box 0”] Initializing an Array 100 -100 0 200 300 0 0 0 1 2 3 4 5 6 How do you set all values in the array to 0? Hint: a for loop from 0 to 6 could give you all the subscripts in the loop for (int intCount = 0 ; intCount<=6; intCount++){ intJeopardy[intCount] = 0; } More using an Array 100 -100 0 200 300 0 0 0 1 2 3 4 5 6 What will this do? System.out.println(“Enter a number”); intJeopardy[4] = scan.NextInt(); Resolve right side: • scan.NextInt(); • gets a number from the user Put into left side variable • Puts the number into the mini-box above #4 Total the Value Held 100 -100 0 200 300 0 0 0 1 2 3 4 5 6 • Loop through the array mini-boxes adding the values int intTot = 0; for (int intCount = 0; intCount <= 6; intCount++){ intTot = intJeopardy[intCount] + intTot; } System.out.println(“The total money earned in the top row is “ + intTot); Parallel Arrays intJeopardy: Cash Value of each box: 100 -100 0 200 300 0 0 0 1 2 3 4 5 6 intPlayed: Played indicator of each box: True True False True True True false 0 1 2 3 4 5 6 Has Jeopardy question 5 been played? Does the 0 in box 5 mean the question hasn’t been played, or that it earned 0 points? Show a message saying the 0 is the score or not if (intPlayed[5] == true) { System.out.println( intJeopardy[5] + “ is the score” );} else { System.out.println( intJeopardy[5] + “ is not the score”);} Practice Array Work • Consider the following program (input underlined): How many days' temperatures? 7 Day 1's high temp: 45 Day 2's high temp: 44 Day 3's high temp: 39 Day 4's high temp: 48 Day 5's high temp: 37 Day 6's high temp: 46 Day 7's high temp: 53 Average temp = 44.57142857142857 4 days were above average. • We need the temperatures to compute the average, and again to tell how many were above average. • (credit our textbook with this problem and solution) Weather Starter – Help to start // This program reads several days' temperatures from the user // and computes the average and how many days were above average. import java.util.Scanner; public class Weather { public static void main(String[] args) { Scanner console = new Scanner(System.in); System.out.print("How many days' temperatures? "); int days = console.nextInt(); days) // create an array to store days' temperatures (as many cells as // initialize a total bucket for (int i = 0; i < days; i++) { // read/store each day's temperature System.out.print(“Enter Day " + (i + 1) + "'s high temp: “); // save the nextInt into your array of temperatures // add the temperature to your bucket } // calculate the average // see if each day is above average by doing searching through the array, // comparing each element to the average } } 13 // print the average temp // print the total count of days above average Weather answer // This program reads several days' temperatures from the user // and computes the average and how many days were above average. import java.util.Scanner; public class Weather { public static void main(String[] args) { Scanner console = new Scanner(System.in); System.out.print("How many days' temperatures? "); int days = console.nextInt(); int[] temperatures = new int[days]; temperatures int sum = 0; // array to store days' for (int i = 0; i < days; i++) { // read/store each day's temperature System.out.print("Day " + (i + 1) + "'s high temp: "); temperatures[i] = console.nextInt(); sum += temperatures[i]; } double average = (double) sum / days; int count = 0; // see if each day is above average for (int i = 0; i < days; i++) { if (temperatures[i] > average) { count++; } } 14 } } // report results System.out.println("Average temp = " + average); System.out.println(count + " days above average"); The Arrays class – A static helper • The Arrays class in package java.util has several useful static methods for manipulating arrays: Method name Description binarySearch(array, value) returns the index of the given value in this array (< 0 if not found) equals(array1, array2) returns true if the two given arrays contain exactly the same elements in the same order fill(array, value) sets every element in the array to have the given value sort(array) arranges the elements in the array into ascending order toString(array) returns a string representing the array, such as "[10, 30, 17]" 15 Arrays.toString • The Arrays.toString method is useful when you want to print an array's elements. – Arrays.toString accepts an array as a parameter and returns the String representation, which you can then print. – Example: int[] a = {2, 5, 1, 6, 14, 7, 9}; for (int i = 1; i < a.length; i++) { a[i] += a[i - 1]; } System.out.println("a is " + Arrays.toString(a)); Output: a is [2, 7, 8, 14, 28, 35, 44] 16 Arrays.toString • The Arrays.toString method is useful when you want to print an array's elements. – Arrays.toString accepts an array as a parameter and returns the String representation, which you can then print. – Example: int[] a = {2, 5, 1, 6, 14, 7, 9}; for (int i = 1; i < a.length; i++) { a[i] += a[i - 1]; } System.out.println("a is " + Arrays.toString(a)); 17 Output: a is [2, 7, 8, 14, 28, 35, 44] Two Dimensional Arrays 0 100 -100 0 200 300 0 0 1 200 500 66 666 0 6 300 0 1 2 3 4 5 6 int [][] intJeopardy= new int[2][7] ; intJeopardy[1][3] is value 666 intJeopardy[0][4] is value 300 What is intJeopardy[0][0] value: What is intJeopardy[1][6] value: What is intJeopardy[1][3] value: What is intJeopardy[2][6] value: What is intJeopardy[1][7] value: Two Dimensional Arrays 0 100 -100 0 200 300 0 0 1 200 500 66 666 0 6 300 0 1 2 3 4 5 6 int [][] intJeopardy= new int[2][7] ; intJeopardy[1][3] is value 666 intJeopardy[0][4] is value 300 What is intJeopardy[0][0] value: 100 What is intJeopardy[1][6] value: 300 What is intJeopardy[1][3] value: 666 What is intJeopardy[2][6] value: crash What is intJeopardy[1][7] value: crash Array of Objects You can have an array of objects: Player class holds name and score. Player [] objPlayer = new Player[4]; car objPlayer[1].name = “Carrie”; ma ry rie objPlayer[1].score = 50; 100 50 What is objPlayer[3].score? 0 1 What is objPlayer[0].name? What is objPlayer[2].name? 2 am y joh n 90 0 3 Functions using Arrays • An array variable is actually a pointer to the set of boxes, so… – Methods can change the mini-boxes in the main program [though it cannot repoint to another location] • Defining in method header: – Use [] after the variable type, and all else the same – Don’t know how big it will be, so leave [] empty public static int[] mymethod(int[] arrayin){ Array parameter questions • Write a method named average that accepts an array of integers as its parameter and returns the average of the values in the array. • Write a method named contains that accepts an array of integers and a target integer value as its parameters and returns whether the array contains the target value as one of its elements. • Write a method named roundAll that accepts an array of doubles as its parameter and modifies each array element by rounding it to the nearest whole number. 22 Array parameter answers public static double average(int[] numbers) { int sum = 0; for (int i = 0; i < numbers.length; i++) { sum += numbers[i]; } return (double) sum / numbers.length; } public static boolean contains(int[] values, int target) { for (int i = 0; i < values.length; i++) { if (values[i] == target) { return true; } } return false; } public static void roundAll(double[] array) { for (int i = 0; i < array.length; i++) { array[i] = Math.round(array[i]); } } 23 String methods with arrays • These String methods return arrays: String s = "long book"; Method name toCharArray() Description separates this string into an array of its characters split(delimiter) separates this string into substrings by the given delimiting string Example s.toCharArray() returns {'l', 'o', 'n', 'g', ' ', 'b', 'o', 'o', 'k'} s.split(" ") returns {"long", "book"} s.split("o") returns {"l", "ng b", "", "k"} 24 String/array problems • Write a method named areAnagrams that accepts two Strings as parameters and returns whether those strings contain the same letters (in any order). – areAnagrams("bear", "bare") returns true – areAnagrams("sale", "sail") returns false – Use any relevant methods from the Arrays class. • Write a method named wordCount that accepts a String as its parameter and returns the number of words in that string. Words are separated by spaces. – wordCount("the quick brown fox") returns 4 25 Main – arg Explained! • command-line arguments: Parameters passed to your program as it is run. – The parameters are passed into main as an array of Strings. – The parameters can be typed into a command prompt or terminal window, or directly in some editors such as DrJava. public static void main(String[] args) { for (int i = 0; i < args.length; i++) { System.out.println("arg " + i + ": " + args[i]); } } • 26 Example: > java arg 0: arg 1: arg 2: ExampleProgram how are you? how are you?