26
Arrays Pepper

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

Embed Size (px)

Citation preview

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

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}

100 -100 0 200 300 0 0

0 1 2 3 4 5 6

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 (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])

100 -100 0 200 300 0 0

0 1 2 3 4 5 6

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;

100 -100 0 200 300 0 0

0 1 2 3 4 5 6

Create your own Array

In BlueJSet 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 SolutionIn BlueJSet 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] = 100intJeopardy[0] = 600System.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

100 -100 0 200 300 0 0

0 1 2 3 4 5 6

for (int intCount = 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();

100 -100 0 200 300 0 0

0 1 2 3 4 5 6

Resolve right side:• scan.NextInt();•gets a number from the userPut 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

100 -100 0 200 300 0 0

0 1 2 3 4 5 6

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 ArraysintJeopardy: 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

100 -100 0 200 300 0 0

0 1 2 3 4 5 6

True True False True True True false

0 1 2 3 4 5 6

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? 7Day 1's high temp: 45Day 2's high temp: 44Day 3's high temp: 39Day 4's high temp: 48Day 5's high temp: 37Day 6's high temp: 46Day 7's high temp: 53Average temp = 44.571428571428574 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)

13

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

}}

14

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"); }}

15

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]"

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));

Output:a is [2, 7, 8, 14, 28, 35, 44]

17

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 Arrays100 -100 0 200 300 0 0

200 500 66 666 0 6 300

0 1 2 3 4 5 6

0

1

int [][] intJeopardy= new int[2][7] ;

intJeopardy[1][3] is value 666intJeopardy[0][4] is value 300What 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 Arrays100 -100 0 200 300 0 0

200 500 66 666 0 6 300

0 1 2 3 4 5 6

0

1

int [][] intJeopardy= new int[2][7] ;

intJeopardy[1][3] is value 666intJeopardy[0][4] is value 300What is intJeopardy[0][0] value: 100What is intJeopardy[1][6] value: 300What is intJeopardy[1][3] value: 666What is intJeopardy[2][6] value: crashWhat is intJeopardy[1][7] value: crash

Array of ObjectsYou 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?

0 1 2 3

carrie

50

mary

100

amy

90

john

0

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){

22

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.

23

Array parameter answerspublic 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]); }}

24

String methods with arrays• These String methods return arrays:

String s = "long book";

Method name Description Example

toCharArray() separates this string into an array of its characters

s.toCharArray() returns {'l', 'o', 'n', 'g', ' ', 'b', 'o', 'o', 'k'}

split(delimiter)

separates this string into substrings by the given delimiting string

s.split(" ") returns{"long", "book"}

s.split("o") returns{"l", "ng b", "", "k"}

25

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

26

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: howarg 1: arearg 2: you?