260 likes | 382 Views
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:. Defining an Array. i nt [] intJeopardy = new int [7]
E N D
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:
Defining an Array 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 • x = intJeopardy[1] ; means x will get the value -100 • intJeopardy[3] = 500; means the 200 will change to 500 • for (intintCount = 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 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 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 (intintCount = 0 ; intCount<=6; intCount++){ intJeopardy[intCount] = 0; }
More using an Array 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 • Loop through the array mini-boxes adding the values intintTot = 0; for (intintCount = 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: intPlayed: Played indicator of each box: 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(); // create an array to store days' temperatures (as many cells as days) // 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 // 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]; // array to store days' temperatures int sum = 0; 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++; } } // 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:
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]
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]
Two Dimensional Arrays 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 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]; objPlayer[1].name = “Carrie”; objPlayer[1].score = 50; What is objPlayer[3].score? What is objPlayer[0].name? What is objPlayer[2].name?
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.
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]); } }
String methods with arrays • These String methods return arrays: String s = "long book";
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
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]); } } • Example: >java ExampleProgram how are you? arg 0: how arg 1: are arg 2: you?