CSS 161 Fundamentals of Compu3ng Arrays November 28, - - PowerPoint PPT Presentation

css 161 fundamentals of compu3ng arrays november 28 2012
SMART_READER_LITE
LIVE PREVIEW

CSS 161 Fundamentals of Compu3ng Arrays November 28, - - PowerPoint PPT Presentation

CSS 161 Fundamentals of Compu3ng Arrays November 28, 2012 Instructor: Uma Murthy Announcements and reminders Homework 6 ques3ons Midterm sheets by


slide-1
SLIDE 1

CSS ¡161 ¡ Fundamentals ¡of ¡Compu3ng ¡ Arrays ¡

November ¡28, ¡2012 ¡

Instructor: ¡Uma ¡Murthy ¡

slide-2
SLIDE 2

Announcements ¡and ¡reminders ¡

  • Homework ¡6 ¡ques3ons ¡
  • Midterm ¡sheets ¡by ¡4pm ¡today ¡ ¡

– will ¡upload ¡grades ¡to ¡catalyst ¡ – Sheets ¡will ¡also ¡be ¡available ¡on ¡Fri ¡during ¡lab ¡

  • Coding ¡Bat ¡
  • HW ¡3-­‑5 ¡grading ¡by ¡end ¡of ¡the ¡week ¡

2 ¡

slide-3
SLIDE 3

Outline ¡today ¡

  • Arrays ¡

3 ¡

slide-4
SLIDE 4

Can ¡we ¡solve ¡this ¡problem? ¡

  • 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.6 4 days were above average. ¡

4 ¡

slide-5
SLIDE 5

Why ¡the ¡problem ¡is ¡hard ¡

  • We ¡need ¡each ¡input ¡value ¡twice: ¡

– to ¡compute ¡the ¡average ¡(a ¡cumula3ve ¡sum) ¡ – to ¡count ¡how ¡many ¡were ¡above ¡average ¡

  • We ¡could ¡read ¡each ¡value ¡into ¡a ¡variable... ¡but ¡we: ¡

– don't ¡know ¡how ¡many ¡days ¡are ¡needed ¡un3l ¡the ¡program ¡ runs ¡ – don't ¡know ¡how ¡many ¡variables ¡to ¡declare ¡

  • We ¡need ¡a ¡way ¡to ¡declare ¡many ¡variables ¡in ¡one ¡step. ¡

5 ¡

slide-6
SLIDE 6

Arrays ¡

  • array: ¡object ¡that ¡stores ¡many ¡values ¡of ¡the ¡same ¡
  • type. ¡
  • alternate ¡descrip-on: ¡data ¡structure ¡used ¡to ¡process ¡

a ¡collec3on ¡of ¡data ¡that ¡is ¡all ¡of ¡the ¡same ¡type ¡

  • Behaves ¡like ¡a ¡numbered ¡list ¡of ¡variables ¡with ¡a ¡

uniform ¡naming ¡mechanism ¡

– What ¡does ¡not ¡change: ¡ ¡the ¡name ¡of ¡the ¡array ¡ – What ¡can ¡change: ¡ ¡an ¡integer ¡in ¡square ¡brackets ¡ – For ¡example, ¡given ¡five ¡scores: ¡

score[0], score[1], score[2], score[3], score[4]

6-­‑6 ¡

slide-7
SLIDE 7

Inside ¡arrays ¡

  • array: ¡object ¡that ¡stores ¡many ¡values ¡of ¡the ¡same ¡type. ¡

– element: ¡One ¡value ¡in ¡an ¡array. ¡ – index: ¡A ¡0-­‑based ¡integer ¡to ¡access ¡an ¡element ¡from ¡an ¡array. ¡ index 1 2 3 4 5 6 7 8 9 value 12 49

  • 2

26 5 17

  • 6

84 72 3 element 0 element 4 element 9

7 ¡

slide-8
SLIDE 8

Array ¡declara3on ¡

type[] name = new type[length];

– Example: ¡ int[] numbers = new int[10];

index 1 2 3 4 5 6 7 8 9 value

8 ¡

slide-9
SLIDE 9

Array ¡declara3on ¡

type[] name = new type[length];

– Example: ¡ int[] numbers = new int[10];

index 1 2 3 4 5 6 7 8 9 value

declares the variable numbers to be of the array type int[] creates an array with 10 numbered variables of type int and makes the variable numbers a name for the array

9 ¡

slide-10
SLIDE 10

Array ¡declara3on, ¡cont. ¡

  • The ¡length ¡can ¡be ¡any ¡integer ¡expression. ¡

int x = 2 * 3 + 1; int[] data = new int[x % 5 + 2];

  • Each ¡element ¡ini3ally ¡gets ¡a ¡"zero-­‑equivalent" ¡value. ¡

Type Default value int double 0.0 boolean false String

  • r other object

null (means, "no object")

10 ¡

slide-11
SLIDE 11

Array ¡declara3on, ¡cont. ¡

  • The ¡length ¡can ¡be ¡any ¡integer ¡expression. ¡

int x = 2 * 3 + 1; int[] data = new int[x % 5 + 2]; //4

  • Each ¡element ¡ini3ally ¡gets ¡a ¡"zero-­‑equivalent" ¡value. ¡

Type Default value int double 0.0 boolean false String

  • r other object

null (means, "no object")

11 ¡

slide-12
SLIDE 12

Accessing ¡elements ¡

name[index] // access ¡ name[index] = value; // modify – Example: ¡

numbers[0] = 27; numbers[3] = -6; System.out.println(numbers[0]); if (numbers[3] < 0) { System.out.println("Element 3 is negative."); }

index 1 2 3 4 5 6 7 8 9 value index 1 2 3 4 5 6 7 8 9 value 27

  • 6

12 ¡

slide-13
SLIDE 13

Arrays ¡of ¡other ¡types ¡

double[] results = new double[5]; results[2] = 3.4; results[4] = -0.5; boolean[] tests = new boolean[6]; tests[3] = true; index 1 2 3 4 value 0.0 0.0 3.4 0.0 -0.5 index 1 2 3 4 5 value false false false true false false

13 ¡

slide-14
SLIDE 14

Out-­‑of-­‑bounds ¡

  • Legal ¡indexes: ¡between ¡0 ¡and ¡the ¡array's ¡length ¡-­‑ ¡1. ¡

//Of ¡what ¡do ¡these ¡indexes ¡and ¡range ¡this ¡remind ¡you? ¡

– Reading ¡or ¡wri3ng ¡any ¡index ¡outside ¡this ¡range ¡will ¡throw ¡an ¡

  • ArrayIndexOutOfBoundsException. ¡
  • Example: ¡

int[] data = new int[10]; System.out.println(data[0]); // okay System.out.println(data[9]); // okay System.out.println(data[-1]); // exception System.out.println(data[10]); // exception index 1 2 3 4 5 6 7 8 9 value

14 ¡

slide-15
SLIDE 15

Accessing ¡array ¡elements ¡

int[] numbers = new int[8]; numbers[1] = 3; numbers[4] = 99; numbers[6] = 2; int x = numbers[1]; numbers[x] = 42; numbers[numbers[6]] = 11; // use numbers[6] as index ¡

x numbers x 3 index 1 2 3 4 5 6 7 value index 1 2 3 4 5 6 7 value 4 11 42 99 2

15 ¡

slide-16
SLIDE 16

Arrays ¡and ¡for ¡loops ¡

  • It ¡is ¡common ¡to ¡use ¡for ¡loops ¡to ¡access ¡array ¡elements. ¡
  • Why? ¡

16 ¡

slide-17
SLIDE 17

Arrays ¡and ¡for ¡loops ¡

  • It ¡is ¡common ¡to ¡use ¡for ¡loops ¡to ¡access ¡array ¡elements. ¡

for (int i = 0; i < 8; i++) { System.out.print(numbers[i] + " "); } System.out.println(); // output: 0 4 11 0 44 0 0 2 ¡

  • Some3mes ¡we ¡assign ¡each ¡element ¡a ¡value ¡in ¡a ¡loop. ¡

for (int i = 0; i < 8; i++) { numbers[i] = 2 * i; }

index 1 2 3 4 5 6 7 value 2 4 6 8 10 12 14

17 ¡

slide-18
SLIDE 18

The ¡length ¡field ¡

  • An ¡array's ¡length ¡field ¡stores ¡its ¡number ¡of ¡elements.

¡name.length for (int i = 0; i < numbers.length; i++) { System.out.print(numbers[i] + " "); } // output: 0 2 4 6 8 10 12 14 – It ¡does ¡not ¡use ¡parentheses ¡like ¡a ¡String's ¡.length(). ¡//why? ¡

  • What ¡expressions ¡refer ¡to: ¡

– The ¡last ¡element ¡of ¡any ¡array? ¡ ¡ ¡ – The ¡middle ¡element? ¡

18 ¡

slide-19
SLIDE 19

Weather ¡ques3on ¡

  • Use ¡an ¡array ¡to ¡solve ¡the ¡weather ¡problem: ¡

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.6 4 days were above average.

19 ¡

slide-20
SLIDE 20

Weather ¡answer ¡

// Reads temperatures from the user, computes average and # days above average. import java.util.*; 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[] temps = 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: "); temps[i] = console.nextInt(); sum += temps[i]; } double average = (double) sum / days; int count = 0; // see if each day is above average for (int i = 0; i < days; i++) { if (temps[i] > average) { count++; } } // report results System.out.printf("Average temp = %.1f\n", average); System.out.println(count + " days above average"); } }

20 ¡

slide-21
SLIDE 21

Quick ¡array ¡ini3aliza3on ¡

type[] name = {value, value, ¡… ¡value}; – Example: ¡ int[] numbers = {12, 49, -2, 26, 5, 17, -6}; – Useful ¡when ¡you ¡know ¡what ¡the ¡array's ¡elements ¡will ¡be ¡ – The ¡compiler ¡figures ¡out ¡the ¡size ¡by ¡coun3ng ¡the ¡values ¡ index 1 2 3 4 5 6 value 12 49

  • 2

26 5 17

  • 6

21 ¡

slide-22
SLIDE 22

"Array ¡mystery" ¡problem ¡

  • traversal: ¡An ¡examina3on ¡of ¡each ¡element ¡of ¡an ¡array. ¡
  • What ¡element ¡values ¡are ¡stored ¡in ¡the ¡following ¡array? ¡ ¡

int[] a = {1, 7, 5, 6, 4, 14, 11}; for (int i = 0; i < a.length - 1; i++) { if (a[i] > a[i + 1]) { a[i + 1] = a[i + 1] * 2; } } index 1 2 3 4 5 6 value index 1 2 3 4 5 6 value 1 7 10 12 8 14 22

22 ¡

slide-23
SLIDE 23

Limita3ons ¡of ¡arrays ¡

  • You ¡cannot ¡resize ¡an ¡exis3ng ¡array: ¡

int[] a = new int[4]; a.length = 10; // error

  • You ¡cannot ¡compare ¡arrays ¡with ¡== ¡or ¡equals: ¡

int[] a1 = {42, -7, 1, 15}; int[] a2 = {42, -7, 1, 15}; if (a1 == a2) { ... } // false! if (a1.equals(a2)) { ... } // false!

  • An ¡array ¡does ¡not ¡know ¡how ¡to ¡print ¡itself: ¡

int[] a1 = {42, -7, 1, 15}; System.out.println(a1); // [I@98f8c4]

23 ¡

slide-24
SLIDE 24

The ¡Arrays ¡class ¡

  • Class ¡Arrays ¡in ¡package ¡java.util ¡has ¡useful ¡sta3c ¡methods ¡for ¡

manipula3ng ¡arrays: ¡

  • Syntax:

¡Arrays.methodName(parameters)

Method name Description

binarySearch(array, value) returns the index of the given value in a sorted array (or < 0 if not found) copyOf(array, length) returns a new copy of an array equals(array1, array2) returns true if the two arrays contain same elements in the same order fill(array, value) sets every element to the given value sort(array) arranges the elements into sorted order toString(array) returns a string representing the array, such as "[10, 30, -25, 17]"

Caution: use these methods only when explicitly allowed to do so and not otherwise. Check with instructor when in doubt.

24 ¡

slide-25
SLIDE 25

Arrays.toString

  • Arrays.toString ¡accepts ¡an ¡array ¡as ¡a ¡

parameter ¡and ¡returns ¡a ¡String ¡representa3on ¡of ¡ its ¡elements. ¡

int[] e = {0, 2, 4, 6, 8}; e[1] = e[3] + e[4]; System.out.println("e is " + Arrays.toString(e));

¡Output: ¡

e is [0, 14, 4, 6, 8]

– Must ¡ ¡import java.util.*;

25 ¡

slide-26
SLIDE 26

Weather ¡ques3on ¡2 ¡

  • Modify ¡the ¡weather ¡program ¡to ¡print ¡the ¡following ¡
  • utput: ¡

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.6 4 days were above average. Temperatures: [45, 44, 39, 48, 37, 46, 53] Two coldest days: 37, 39 Two hottest days: 53, 48

26 ¡

slide-27
SLIDE 27

Weather ¡answer ¡2 ¡

// Reads temperatures from the user, computes average and # days above average. import java.util.*; public class Weather2 { public static void main(String[] args) { ... int[] temps = new int[days]; // array to store days' temperatures ... (same as Weather program) // report results System.out.printf("Average temp = %.1f\n", average); System.out.println(count + " days above average"); System.out.println("Temperatures: " + Arrays.toString(temps)); Arrays.sort(temps); System.out.println("Two coldest days: " + temps[0] + ", " + temps[1]); System.out.println("Two hottest days: " + temps[temps.length - 1] + ", " + temps[temps.length - 2]); } }

27 ¡

slide-28
SLIDE 28

Arrays ¡as ¡parameters ¡

slide-29
SLIDE 29

Swapping ¡values ¡

public static void main(String[] args) { int a = 7; int b = 35; // swap a with b? a = b; b = a; System.out.println(a + " " + b); } – What ¡is ¡wrong ¡with ¡this ¡code? ¡ ¡What ¡is ¡its ¡output? ¡

  • The ¡red ¡code ¡should ¡be ¡replaced ¡with: ¡

int temp = a; a = b; b = temp; ¡

29 ¡

slide-30
SLIDE 30

Array ¡reversal ¡ques3on ¡

  • Write ¡code ¡that ¡reverses ¡the ¡elements ¡of ¡an ¡array. ¡

– For ¡example, ¡if ¡the ¡array ¡ini3ally ¡stores: ¡ [11, 42, -5, 27, 0, 89] – Then ¡aeer ¡your ¡reversal ¡code, ¡it ¡should ¡store: ¡ [89, 0, 27, -5, 42, 11]

  • The ¡code ¡should ¡work ¡for ¡an ¡array ¡of ¡any ¡size. ¡
  • Hint: ¡think ¡about ¡swapping ¡various ¡elements... ¡

30 ¡

slide-31
SLIDE 31

Algorithm ¡idea ¡

  • Swap ¡pairs ¡of ¡elements ¡from ¡the ¡edges; ¡ ¡work ¡

inwards: ¡

index 1 2 3 4 5 value 11 42

  • 5

27 89 index 1 2 3 4 5 value 89 42

  • 5

27 11 index 1 2 3 4 5 value 89

  • 5

27 42 11 index 1 2 3 4 5 value 89 27

  • 5

42 11

31 ¡

slide-32
SLIDE 32

Flawed ¡algorithm ¡

  • What's ¡wrong ¡with ¡this ¡code? ¡

int[] numbers = [11, 42, -5, 27, 0, 89]; // reverse the array for (int i = 0; i < numbers.length; i++) { int temp = numbers[i]; numbers[i] = numbers[numbers.length - 1 - i]; numbers[numbers.length - 1 - i] = temp; }

  • The ¡loop ¡goes ¡too ¡far ¡and ¡un-­‑reverses ¡the ¡array! ¡ ¡Fixed ¡version: ¡

for (int i = 0; i < numbers.length / 2; i++) { int temp = numbers[i]; numbers[i] = numbers[numbers.length - 1 - i]; numbers[numbers.length - 1 - i] = temp; }

32 ¡

slide-33
SLIDE 33

Array ¡reverse ¡ques3on ¡2 ¡

  • Turn ¡your ¡array ¡reversal ¡code ¡into ¡a ¡reverse ¡method. ¡

– Accept ¡the ¡array ¡of ¡integers ¡to ¡reverse ¡as ¡a ¡parameter. ¡ int[] numbers = {11, 42, -5, 27, 0, 89}; reverse(numbers); – How ¡do ¡we ¡write ¡methods ¡that ¡accept ¡arrays ¡as ¡parameters? ¡ – Will ¡we ¡need ¡to ¡return ¡the ¡new ¡array ¡contents ¡aeer ¡reversal? ¡ ¡... ¡

33 ¡

slide-34
SLIDE 34

Array ¡parameter ¡(declare) ¡

public static type methodName(type[] name) {

  • Example: ¡

// Returns the average of the given array of numbers. 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; } – You ¡don't ¡specify ¡the ¡array's ¡length ¡(but ¡you ¡can ¡examine ¡it). ¡

34 ¡

slide-35
SLIDE 35

Array ¡parameter ¡(call) ¡

¡methodName(arrayName);

  • Example: ¡

public class MyProgram { public static void main(String[] args) { // figure out the average TA IQ int[] iq = {126, 84, 149, 167, 95}; double avg = average(iq); System.out.println("Average IQ = " + avg); } ... – No3ce ¡that ¡you ¡don't ¡write ¡the ¡[] ¡when ¡passing ¡the ¡array. ¡

35 ¡

slide-36
SLIDE 36

Array ¡return ¡(declare) ¡

public static type[] methodName(parameters) {

  • Example: ¡

// Returns a new array with two copies of each value. // Example: [1, 4, 0, 7] -> [1, 1, 4, 4, 0, 0, 7, 7] public static int[] stutter(int[] numbers) { int[] result = new int[2 * numbers.length]; for (int i = 0; i < numbers.length; i++) { result[2 * i] = numbers[i]; result[2 * i + 1] = numbers[i]; } return result; } ¡

36 ¡

slide-37
SLIDE 37

Array ¡return ¡(call) ¡

¡type[] name = methodName(parameters);

  • Example: ¡

public class MyProgram { public static void main(String[] args) { int[] iq = {126, 84, 149, 167, 95}; int[] stuttered = stutter(iq); System.out.println(Arrays.toString(stuttered)); } ...

  • Output: ¡

[126, 126, 84, 84, 149, 149, 167, 167, 95, 95] ¡

37 ¡

slide-38
SLIDE 38

Reference ¡seman3cs ¡

38 38 ¡

slide-39
SLIDE 39

A ¡swap ¡method? ¡

  • Does ¡the ¡following ¡swap ¡method ¡work? ¡ ¡Why ¡or ¡why ¡not? ¡

public static void main(String[] args) { int a = 7; int b = 35; // swap a with b? swap(a, b); System.out.println(a + " " + b); } public static void swap(int a, int b) { int temp = a; a = b; b = temp; }

39 ¡

slide-40
SLIDE 40

Value ¡seman3cs ¡

  • value ¡seman:cs: ¡Behavior ¡where ¡values ¡are ¡copied ¡

when ¡assigned, ¡passed ¡as ¡parameters, ¡or ¡returned. ¡

– All ¡primi3ve ¡types ¡in ¡Java ¡use ¡value ¡seman3cs. ¡ – When ¡one ¡variable ¡is ¡assigned ¡to ¡another, ¡its ¡value ¡is ¡

  • copied. ¡

– Modifying ¡the ¡value ¡of ¡one ¡variable ¡does ¡not ¡affect ¡others. ¡ int x = 5; int y = x; // x = 5, y = 5 y = 17; // x = 5, y = 17 x = 8; // x = 8, y = 17

40 ¡

slide-41
SLIDE 41

Reference ¡seman3cs ¡(objects) ¡

  • reference ¡seman:cs: ¡Behavior ¡where ¡variables ¡

actually ¡store ¡the ¡address ¡of ¡an ¡object ¡in ¡memory. ¡

– When ¡one ¡variable ¡is ¡assigned ¡to ¡another, ¡the ¡object ¡is ¡ not ¡copied; ¡both ¡variables ¡refer ¡to ¡the ¡same ¡object. ¡ – Modifying ¡the ¡value ¡of ¡one ¡variable ¡will ¡affect ¡others.

int[] a1 = {4, 15, 8}; int[] a2 = a1; // refer to same array as a1 a2[0] = 7; System.out.println(Arrays.toString(a1)); // [7, 15, 8] ¡

index 1 2 value 4 15 8 index 1 2 value 7 15 8 a1 a2

41 ¡

slide-42
SLIDE 42

References ¡and ¡objects ¡

  • Arrays ¡and ¡objects ¡use ¡reference ¡seman3cs. ¡ ¡Why? ¡

– efficiency. ¡ ¡Copying ¡large ¡objects ¡slows ¡down ¡a ¡program. ¡ – sharing. ¡ ¡It's ¡useful ¡to ¡share ¡an ¡object's ¡data ¡among ¡methods. ¡ DrawingPanel panel1 = new DrawingPanel(80, 50); DrawingPanel panel2 = panel1; // same window panel2.setBackground(Color.CYAN); panel1 panel2

42 ¡

slide-43
SLIDE 43

Objects ¡as ¡parameters ¡

  • When ¡an ¡object ¡is ¡passed ¡as ¡a ¡parameter, ¡the ¡object ¡is ¡not ¡
  • copied. ¡ ¡The ¡parameter ¡refers ¡to ¡the ¡same ¡object. ¡

– If ¡the ¡parameter ¡is ¡modified, ¡it ¡will ¡affect ¡the ¡original ¡object. ¡

public static void main(String[] args) { DrawingPanel window = new DrawingPanel(80, 50); window.setBackground(Color.YELLOW); example(window); } public static void example(DrawingPanel panel) { panel.setBackground(Color.CYAN); ... }

panel window

43 ¡

slide-44
SLIDE 44

Arrays ¡pass ¡by ¡reference ¡

  • Arrays ¡are ¡passed ¡as ¡parameters ¡by ¡reference. ¡

– Changes ¡made ¡in ¡the ¡method ¡are ¡also ¡seen ¡by ¡the ¡caller. public static void main(String[] args) { int[] iq = {126, 167, 95}; increase(iq); System.out.println(Arrays.toString(iq)); } public static void increase(int[] a) { for (int i = 0; i < a.length; i++) { a[i] = a[i] * 2; } } – Output: ¡ [252, 334, 190] index 1 2 value 126 167 95 index 1 2 value 252 334 190 iq a

44 ¡

slide-45
SLIDE 45

Array ¡reverse ¡ques3on ¡2 ¡

  • Turn ¡your ¡array ¡reversal ¡code ¡into ¡a ¡reverse ¡method. ¡

– Accept ¡the ¡array ¡of ¡integers ¡to ¡reverse ¡as ¡a ¡parameter. ¡ int[] numbers = {11, 42, -5, 27, 0, 89}; reverse(numbers);

  • Solu3on: ¡

public static void reverse(int[] numbers) { for (int i = 0; i < numbers.length / 2; i++) { int temp = numbers[i]; numbers[i] = numbers[numbers.length - 1 - i]; numbers[numbers.length - 1 - i] = temp; } }

45 ¡

slide-46
SLIDE 46

Array ¡parameter ¡ques3ons ¡

  • Write ¡a ¡method ¡swap ¡that ¡accepts ¡an ¡array ¡of ¡integers ¡and ¡

two ¡indexes ¡and ¡swaps ¡the ¡elements ¡at ¡those ¡indexes. ¡

int[] a1 = {12, 34, 56}; swap(a1, 1, 2); System.out.println(Arrays.toString(a1)); // [12, 56, 34]

  • Write ¡a ¡method ¡swapAll ¡that ¡accepts ¡two ¡arrays ¡of ¡integers ¡

as ¡parameters ¡and ¡swaps ¡their ¡en3re ¡contents. ¡

– Assume ¡that ¡the ¡two ¡arrays ¡are ¡the ¡same ¡length. ¡

int[] a1 = {12, 34, 56}; int[] a2 = {20, 50, 80}; swapAll(a1, a2); System.out.println(Arrays.toString(a1)); // [20, 50, 80] System.out.println(Arrays.toString(a2)); // [12, 34, 56]

46 ¡

slide-47
SLIDE 47

Array ¡parameter ¡answers ¡

// Swaps the values at the given two indexes. public static void swap(int[] a, int i, int j) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } // Swaps the entire contents of a1 with those of a2. public static void swapAll(int[] a1, int[] a2) { for (int i = 0; i < a1.length; i++) { int temp = a1[i]; a1[i] = a2[i]; a2[i] = temp; } }

47 ¡

slide-48
SLIDE 48

Array ¡return ¡ques3on ¡

  • Write ¡a ¡method ¡merge ¡that ¡accepts ¡two ¡arrays ¡of ¡integers ¡

and ¡returns ¡a ¡new ¡array ¡containing ¡all ¡elements ¡of ¡the ¡first ¡ array ¡followed ¡by ¡all ¡elements ¡of ¡the ¡second. ¡

int[] a1 = {12, 34, 56}; int[] a2 = {7, 8, 9, 10}; int[] a3 = merge(a1, a2); System.out.println(Arrays.toString(a3)); // [12, 34, 56, 7, 8, 9, 10]

  • Write ¡a ¡method ¡merge3 ¡that ¡merges ¡3 ¡arrays ¡similarly. ¡

int[] a1 = {12, 34, 56}; int[] a2 = {7, 8, 9, 10}; int[] a3 = {444, 222, -1}; int[] a4 = merge3(a1, a2, a3); System.out.println(Arrays.toString(a4)); // [12, 34, 56, 7, 8, 9, 10, 444, 222, -1]

48 ¡

slide-49
SLIDE 49

Array ¡return ¡answer ¡1 ¡

// Returns a new array containing all elements of a1 // followed by all elements of a2. public static int[] merge(int[] a1, int[] a2) { int[] result = new int[a1.length + a2.length]; for (int i = 0; i < a1.length; i++) { result[i] = a1[i]; } for (int i = 0; i < a2.length; i++) { result[a1.length + i] = a2[i]; } return result; }

49 ¡

slide-50
SLIDE 50

Array ¡return ¡answer ¡2 ¡

// Returns a new array containing all elements of a1,a2,a3. public static int[] merge3(int[] a1, int[] a2, int[] a3) { int[] a4 = new int[a1.length + a2.length + a3.length]; for (int i = 0; i < a1.length; i++) { a4[i] = a1[i]; } for (int i = 0; i < a2.length; i++) { a4[a1.length + i] = a2[i]; } for (int i = 0; i < a3.length; i++) { a4[a1.length + a2.length + i] = a3[i]; } return a4; } // Shorter version that calls merge. public static int[] merge3(int[] a1, int[] a2, int[] a3) { return merge(merge(a1, a2), a3); }

50 ¡

slide-51
SLIDE 51

Arrays ¡for ¡tallying ¡

slide-52
SLIDE 52

A ¡mul3-­‑counter ¡problem ¡

  • Problem: ¡Write ¡a ¡method ¡mostFrequentDigit ¡

that ¡returns ¡the ¡digit ¡value ¡that ¡occurs ¡most ¡ frequently ¡in ¡a ¡number. ¡

– Example: ¡The ¡number ¡669260267 ¡contains: ¡ ¡ ¡ ¡one ¡0, ¡two ¡2s, ¡four ¡6es, ¡one ¡7, ¡and ¡one ¡9. ¡ mostFrequentDigit(669260267) ¡returns ¡6. ¡ – If ¡there ¡is ¡a ¡3e, ¡return ¡the ¡digit ¡with ¡the ¡lower ¡value. ¡ mostFrequentDigit(57135203) ¡returns ¡3. ¡

52 ¡

slide-53
SLIDE 53

A ¡mul3-­‑counter ¡problem ¡

  • We ¡could ¡declare ¡10 ¡counter ¡variables ¡... ¡

int counter0, counter1, counter2, counter3, counter4, counter5, counter6, counter7, counter8, counter9;

  • But ¡a ¡bemer ¡solu3on ¡is ¡to ¡use ¡an ¡array ¡of ¡size ¡10. ¡

– The ¡element ¡at ¡index ¡i ¡will ¡store ¡the ¡counter ¡for ¡digit ¡value ¡i. ¡ – Example ¡for ¡669260267: ¡ – How ¡do ¡we ¡build ¡such ¡an ¡array? ¡ ¡And ¡how ¡does ¡it ¡help? ¡ index 1 2 3 4 5 6 7 8 9 value 1 2 4 1

53 ¡

slide-54
SLIDE 54

Crea3ng ¡an ¡array ¡of ¡tallies ¡

// assume n = 669260267 int[] counts = new int[10]; while (n > 0) { // pluck off a digit and add to proper counter int digit = n % 10; counts[digit]++; n = n / 10; }

index 1 2 3 4 5 6 7 8 9 value 1 2 4 1

54 ¡

slide-55
SLIDE 55

Tally ¡solu3on ¡

// Returns the digit value that occurs most frequently in n. // Breaks ties by choosing the smaller value. public static int mostFrequentDigit(int n) { int[] counts = new int[10]; while (n > 0) { int digit = n % 10; // pluck off a digit and tally it counts[digit]++; n = n / 10; } // find the most frequently occurring digit int bestIndex = 0; for (int i = 1; i < counts.length; i++) { if (counts[i] > counts[bestIndex]) { bestIndex = i; } } return bestIndex; }

55 ¡

slide-56
SLIDE 56

Array ¡histogram ¡ques3on ¡

  • Given ¡a ¡file ¡of ¡integer ¡exam ¡scores, ¡such ¡as: ¡

82 66 79 63 83 Write ¡a ¡program ¡that ¡will ¡print ¡a ¡histogram ¡of ¡stars ¡indica3ng ¡the ¡ number ¡of ¡students ¡who ¡earned ¡each ¡unique ¡exam ¡score. ¡ 85: ***** 86: ************ 87: *** 88: * 91: ****

56 ¡

slide-57
SLIDE 57

Array ¡histogram ¡answer ¡

// Reads a file of test scores and shows a histogram of score distribution. import java.io.*; import java.util.*; public class Histogram { public static void main(String[] args) throws FileNotFoundException { Scanner input = new Scanner(new File("midterm.txt")); int[] counts = new int[101]; // counters of test scores 0 - 100 while (input.hasNextInt()) { // read file into counts array int score = input.nextInt(); counts[score]++; // if score is 87, then counts[87]++ } for (int i = 0; i < counts.length; i++) { // print star histogram if (counts[i] > 0) { System.out.print(i + ": "); for (int j = 0; j < counts[i]; j++) { System.out.print("*"); } System.out.println(); } } } }

57 ¡

slide-58
SLIDE 58

Comparing ¡arrays ¡

58 ¡

slide-59
SLIDE 59

Slides ¡60-­‑71 ¡are ¡derived ¡from ¡ supplements ¡available ¡with ¡ Absolute ¡Java ¡by ¡Walter ¡Savitch ¡ ¡

59 ¡

slide-60
SLIDE 60

Pioall: ¡ ¡Use ¡of ¡= ¡and ¡== ¡with ¡Arrays ¡

  • Because ¡an ¡array ¡variable ¡contains ¡the ¡memory ¡

address ¡of ¡the ¡array ¡it ¡names, ¡the ¡assignment ¡

  • perator ¡(=) ¡only ¡copies ¡this ¡memory ¡address ¡

– It ¡does ¡not ¡copy ¡the ¡values ¡of ¡each ¡indexed ¡variable ¡ – Using ¡the ¡assignment ¡operator ¡will ¡make ¡two ¡array ¡ variables ¡be ¡different ¡names ¡for ¡the ¡same ¡array ¡

b = a;

– The ¡memory ¡address ¡in ¡a ¡is ¡now ¡the ¡same ¡as ¡the ¡ memory ¡address ¡in ¡b: ¡ ¡They ¡reference ¡the ¡same ¡array ¡

60 ¡

slide-61
SLIDE 61

Pioall: ¡ ¡Use ¡of ¡= ¡and ¡== ¡with ¡Arrays ¡

  • A ¡for ¡loop ¡is ¡usually ¡used ¡to ¡make ¡two ¡different

¡ arrays ¡have ¡the ¡same ¡values ¡in ¡each ¡indexed ¡ posi3on: ¡

int i; for (i = 0; (i < a.length) && (i < b.length); i++) b[i] = a[i];

– Note ¡that ¡the ¡above ¡code ¡will ¡not ¡make ¡b ¡an ¡exact ¡ copy ¡of ¡a, ¡unless ¡a ¡and ¡b ¡have ¡the ¡same ¡length ¡ ¡

61 ¡

slide-62
SLIDE 62

Pioall: ¡ ¡Use ¡of ¡= ¡and ¡== ¡with ¡Arrays ¡

  • For ¡the ¡same ¡reason, ¡the ¡equality ¡operator ¡(==) ¡
  • nly ¡tests ¡two ¡arrays ¡to ¡see ¡if ¡they ¡are ¡stored ¡in ¡

the ¡same ¡loca3on ¡in ¡the ¡computer's ¡memory ¡

– It ¡does ¡not ¡test ¡two ¡arrays ¡to ¡see ¡if ¡they ¡contain ¡the ¡ same ¡values ¡

(a == b)

– The ¡result ¡of ¡the ¡above ¡boolean ¡expression ¡will ¡be ¡ true ¡if ¡a ¡and ¡b ¡share ¡the ¡same ¡memory ¡address ¡ (and, ¡therefore, ¡reference ¡the ¡same ¡array), ¡and ¡ false ¡otherwise ¡

62 ¡

slide-63
SLIDE 63

Pioall: ¡ ¡Use ¡of ¡= ¡and ¡== ¡with ¡Arrays ¡

  • In ¡the ¡same ¡way ¡that ¡an ¡equals ¡method ¡

can ¡be ¡defined ¡for ¡a ¡class, ¡an ¡ ¡ equalsArray method ¡can ¡be ¡defined ¡ for ¡a ¡type ¡of ¡array ¡

– This ¡is ¡how ¡two ¡arrays ¡must ¡be ¡tested ¡to ¡see ¡ if ¡they ¡contain ¡the ¡same ¡elements ¡ – The ¡following ¡method ¡tests ¡two ¡integer ¡ arrays ¡to ¡see ¡if ¡they ¡contain ¡the ¡same ¡integer ¡ values ¡ ¡

63 ¡

slide-64
SLIDE 64

Pioall: ¡ ¡Use ¡of ¡= ¡and ¡== ¡with ¡Arrays ¡

public static boolean equalsArray(int[] a, int[] b) { if (a.length != b.length) return false; else { int i = 0; while (i < a.length) { if (a[i] != b[i]) return false; i++; } } return true; }

64 ¡

slide-65
SLIDE 65

Arguments ¡for ¡the ¡Method ¡main

  • The ¡heading ¡for ¡the ¡main ¡method ¡of ¡a ¡program ¡has ¡

a ¡parameter ¡for ¡an ¡array ¡ ¡of ¡String

– It ¡is ¡usually ¡called ¡args ¡by ¡conven3on ¡

public static void main(String[] args)

– Note ¡that ¡since ¡args ¡is ¡a ¡parameter, ¡it ¡could ¡be ¡replaced ¡ by ¡any ¡other ¡non-­‑keyword ¡iden3fier ¡

  • If ¡a ¡Java ¡program ¡is ¡run ¡without ¡giving ¡an ¡argument ¡

to ¡main, ¡then ¡a ¡default ¡empty ¡array ¡of ¡strings ¡is ¡ automa3cally ¡provided

65 ¡

slide-66
SLIDE 66

Arguments ¡for ¡the ¡Method ¡main

  • Here ¡is ¡a ¡program ¡that ¡expects ¡three ¡string ¡

arguments: ¡

public class SomeProgram { public static void main(String[] args) { System.out.println(args[0] + " " + args[2] + args[1]); } }

  • Note ¡that ¡if ¡it ¡needed ¡numbers, ¡it ¡would ¡have ¡to ¡

convert ¡them ¡from ¡strings ¡first ¡

66 ¡

slide-67
SLIDE 67

Arguments ¡for ¡the ¡Method ¡main

  • If ¡a ¡program ¡requires ¡that ¡the ¡main ¡method ¡be ¡

provided ¡an ¡array ¡of ¡strings ¡argument, ¡each ¡element ¡ must ¡be ¡provided ¡from ¡the ¡command ¡line ¡when ¡the ¡ program ¡is ¡run ¡

java SomeProgram Hi ! there – This ¡will ¡set ¡args[0] ¡to ¡"Hi", ¡args[1] ¡to ¡"!", ¡and ¡args [2] ¡to ¡"there" ¡ – It ¡will ¡also ¡set ¡args.length ¡to ¡3 ¡

  • When ¡SomeProgram ¡is ¡run ¡as ¡shown, ¡its ¡output ¡

will ¡be: ¡

Hi there!

67 ¡

slide-68
SLIDE 68

for ¡each ¡

68 ¡

slide-69
SLIDE 69

The ¡"for each" ¡Loop ¡

  • The ¡standard ¡Java ¡libraries ¡include ¡a ¡number ¡of ¡collec3on ¡

classes ¡

– Classes ¡whose ¡objects ¡store ¡a ¡collec3on ¡of ¡values ¡

  • Ordinary ¡for ¡loops ¡cannot ¡cycle ¡through ¡the ¡elements ¡in ¡

a ¡collec3on ¡object ¡ ¡

– Unlike ¡array ¡elements, ¡collec3on ¡object ¡elements ¡are ¡not ¡ normally ¡associated ¡with ¡indices ¡

  • However, ¡there ¡is ¡a ¡new ¡kind ¡of ¡for ¡loop, ¡first ¡available ¡

in ¡Java ¡5.0, ¡called ¡a ¡for-­‑each ¡loop ¡or ¡enhanced ¡for ¡loop ¡

  • This ¡kind ¡of ¡loop ¡can ¡cycle ¡through ¡each ¡element ¡in ¡a ¡

collec3on ¡even ¡though ¡the ¡elements ¡are ¡not ¡indexed ¡

69 ¡

slide-70
SLIDE 70

The ¡"for each" ¡Loop ¡

  • Although ¡an ¡ordinary ¡for ¡loop ¡cannot ¡cycle ¡through ¡the ¡

elements ¡of ¡a ¡collec3on ¡class, ¡an ¡enhanced ¡for ¡loop ¡can ¡ cycle ¡through ¡the ¡elements ¡of ¡an ¡array ¡

  • The ¡general ¡syntax ¡for ¡a ¡for-­‑each ¡loop ¡statement ¡used ¡

with ¡an ¡array ¡is ¡

for (ArrayBaseType VariableName : ArrayName) Statement

  • The ¡above ¡for-­‑each ¡line ¡should ¡be ¡read ¡as ¡"for ¡each ¡

VariableName ¡in ¡ArrayName ¡do ¡the ¡following:" ¡

– Note ¡that ¡VariableName ¡must ¡be ¡declared ¡within ¡the ¡for-­‑ each ¡loop, ¡not ¡before ¡ – Note ¡also ¡that ¡a ¡colon ¡(not ¡a ¡semicolon) ¡is ¡used ¡aeer ¡ VariableName

70 ¡

slide-71
SLIDE 71

The ¡"For-­‑Each" ¡Loop ¡

  • The ¡for-­‑each ¡loop ¡can ¡make ¡code ¡cleaner ¡and ¡less ¡error ¡

prone ¡

  • If ¡the ¡indexed ¡variable ¡in ¡a ¡for ¡loop ¡is ¡used ¡only ¡as ¡a ¡way ¡

to ¡cycle ¡through ¡the ¡elements, ¡then ¡it ¡would ¡be ¡ preferable ¡to ¡change ¡it ¡to ¡a ¡for-­‑each ¡loop ¡

– For ¡example: ¡

for (int i = 0; i < a.length; i++) a[i] = 0.0;

– Can ¡be ¡changed ¡to: ¡

for (double element : a) element = 0.0;

  • Note ¡that ¡the ¡for-­‑each ¡syntax ¡is ¡ ¡simpler ¡and ¡quite ¡easy ¡to ¡

understand ¡

71 ¡

slide-72
SLIDE 72

Par3ally ¡filled ¡arrays ¡

  • Weather ¡problem ¡which ¡can ¡take ¡a ¡maximum ¡
  • f ¡10 ¡temperature ¡values. ¡Aeer ¡each ¡

temperature ¡entered, ¡the ¡method ¡prints ¡the ¡

  • average. ¡If ¡the ¡number ¡of ¡inputs ¡is ¡above ¡10, ¡it ¡

prints ¡an ¡error ¡message. ¡ ¡

72 ¡

slide-73
SLIDE 73

Arrays ¡of ¡objects ¡

  • Consider ¡an ¡array ¡of ¡Points ¡
  • Move ¡every ¡alternate ¡point ¡by ¡(3, ¡2) ¡
  • (See ¡code ¡for ¡Point ¡and ¡PointArrayDriver ¡amached ¡with ¡the ¡

lecture ¡slides) ¡

73 ¡

slide-74
SLIDE 74

Arrays ¡Prac3ce ¡Problems ¡

  • CodingBat ¡

– Java ¡> ¡Array-­‑1 ¡> ¡maxTriple ¡ ¡ – Java ¡> ¡Array-­‑1 ¡> ¡front11 ¡ ¡ – Java ¡> ¡Array-­‑2 ¡> ¡withoutTen ¡ ¡

  • Prac3ceIt ¡(evenBeforeOdd ¡and ¡caughtSkipping ¡have ¡been ¡solved ¡in ¡the

¡ two ¡Java ¡files ¡with ¡similar ¡names ¡found ¡along ¡with ¡the ¡lecture ¡slides) ¡

– Prac3ce ¡Final ¡8 ¡(09su) ¡compress ¡ – Prac3ce ¡Final ¡9 ¡(09au) ¡evenBeforeOdd ¡ – Prac3ce ¡Final ¡11 ¡(10su) ¡caughtSkipping ¡

74 ¡

slide-75
SLIDE 75

Example ¡about ¡reading ¡input ¡and ¡ crea3ng ¡and ¡manipula3ng ¡arrays ¡

  • Review ¡the ¡slides ¡carefully ¡
  • Test ¡the ¡code ¡by ¡manually ¡tracing ¡the ¡given ¡

input ¡ ¡

  • Run ¡the ¡code ¡on ¡BlueJ, ¡play ¡around ¡with ¡it ¡and ¡

see ¡how ¡the ¡output ¡varies ¡for ¡different ¡input. ¡

75 ¡

slide-76
SLIDE 76

Sec3on ¡amendance ¡ques3on ¡

  • Read ¡a ¡file ¡of ¡sec3on ¡amendance ¡(see ¡next ¡slide): ¡

yynyyynayayynyyyayanyyyaynayyayyanayyyanyayna ayyanyyyyayanaayyanayyyananayayaynyayayynynya yyayaynyyayyanynnyyyayyanayaynannnyyayyayayny ¡

  • And ¡produce ¡the ¡following ¡output: ¡

Section 1 Student points: [20, 17, 19, 16, 13] Student grades: [100.0, 85.0, 95.0, 80.0, 65.0] Section 2 Student points: [17, 20, 16, 16, 10] Student grades: [85.0, 100.0, 80.0, 80.0, 50.0] Section 3 Student points: [17, 18, 17, 20, 16] Student grades: [85.0, 90.0, 85.0, 100.0, 80.0]

  • Students ¡earn ¡3 ¡points ¡for ¡each ¡sec3on ¡amended ¡up ¡to ¡20. ¡

76 ¡

slide-77
SLIDE 77

– Each ¡line ¡represents ¡a ¡sec3on. ¡ – A ¡line ¡consists ¡of ¡9 ¡weeks' ¡worth ¡of ¡data. ¡

  • Each ¡week ¡has ¡5 ¡characters ¡because ¡there ¡are ¡5 ¡students. ¡

– Within ¡each ¡week, ¡each ¡character ¡represents ¡one ¡student. ¡

  • a ¡means ¡the ¡student ¡was ¡absent

¡(+0 ¡points) ¡

  • n ¡means ¡they ¡amended ¡but ¡didn't ¡do ¡the ¡problems

¡(+2 ¡points) ¡

  • y ¡means ¡they ¡amended ¡and ¡did ¡the ¡problems

¡(+3 ¡points) ¡

Sec3on ¡input ¡file ¡

yynyyynayayynyyyayanyyyaynayyayyanayyyanyayna ayyanyyyyayanaayyanayyyananayayaynyayayynynya yyayaynyyayyanynnyyyayyanayaynannnyyayyayayny week 1 2 3 4 5 6 7 8 9 student 123451234512345123451234512345123451234512345 section 1 section 2 section 3

77 ¡

slide-78
SLIDE 78

Sec3on ¡amendance ¡answer ¡

import java.io.*; import java.util.*; public class Sections { public static void main(String[] args) throws FileNotFoundException { Scanner input = new Scanner(new File("sections.txt")); int section = 1; while (input.hasNextLine()) { String line = input.nextLine(); // process one section int[] points = new int[5]; for (int i = 0; i < line.length(); i++) { int student = i % 5; int earned = 0; if (line.charAt(i) == 'y') { // c == 'y' or 'n' or 'a' earned = 3; } else if (line.charAt(i) == 'n') { earned = 2; } points[student] = Math.min(20, points[student] + earned); } double[] grades = new double[5]; for (int i = 0; i < points.length; i++) { grades[i] = 100.0 * points[i] / 20.0; } System.out.println("Section " + section); System.out.println("Student points: " + Arrays.toString(points)); System.out.println("Student grades: " + Arrays.toString(grades)); System.out.println(); section++; } } }

78 ¡

slide-79
SLIDE 79

Data ¡transforma3ons ¡

  • In ¡many ¡problems ¡we ¡transform ¡data ¡between ¡forms. ¡

– Example: ¡ ¡digits ¡ ¡→ ¡count ¡of ¡each ¡digit ¡ ¡→ ¡most ¡frequent ¡digit ¡ – Oeen ¡each ¡transforma3on ¡is ¡computed/stored ¡as ¡an ¡array. ¡ – For ¡structure, ¡a ¡transforma3on ¡is ¡oeen ¡put ¡in ¡its ¡own ¡method. ¡

  • Some3mes ¡we ¡map ¡between ¡data ¡and ¡array ¡indexes. ¡

– by ¡posi3on ¡(store ¡the ¡i ¡th ¡value ¡we ¡read ¡at ¡index ¡i ¡) ¡ – tally ¡(if ¡input ¡value ¡is ¡i, ¡store ¡it ¡at ¡array ¡index ¡i ¡) ¡ – explicit ¡mapping ¡(count ¡'J' ¡at ¡index ¡0, ¡count ¡'X' ¡at ¡index ¡1) ¡

  • Exercise: ¡Modify ¡our ¡Sec3ons ¡program ¡to ¡use ¡sta3c ¡methods ¡

that ¡use ¡arrays ¡as ¡parameters ¡and ¡returns. ¡

79 ¡

slide-80
SLIDE 80

Array ¡param/return ¡answer ¡

// This program reads a file representing which students attended // which discussion sections and produces output of the students' // section attendance and scores. import java.io.*; import java.util.*; public class Sections2 { public static void main(String[] args) throws FileNotFoundException { Scanner input = new Scanner(new File("sections.txt")); int section = 1; while (input.hasNextLine()) { // process one section String line = input.nextLine(); int[] points = countPoints(line); double[] grades = computeGrades(points); results(section, points, grades); section++; } } // Produces all output about a particular section. public static void results(int section, int[] points, double[] grades) { System.out.println("Section " + section); System.out.println("Student scores: " + Arrays.toString(points)); System.out.println("Student grades: " + Arrays.toString(grades)); System.out.println(); } ...

80 ¡

slide-81
SLIDE 81

Array ¡param/return ¡answer ¡

... // Computes the points earned for each student for a particular section. public static int[] countPoints(String line) { int[] points = new int[5]; for (int i = 0; i < line.length(); i++) { int student = i % 5; int earned = 0; if (line.charAt(i) == 'y') { // c == 'y' or c == 'n' earned = 3; } else if (line.charAt(i) == 'n') { earned = 2; } points[student] = Math.min(20, points[student] + earned); } return points; } // Computes the percentage for each student for a particular section. public static double[] computeGrades(int[] points) { double[] grades = new double[5]; for (int i = 0; i < points.length; i++) { grades[i] = 100.0 * points[i] / 20.0; } return grades; } }

81 ¡

slide-82
SLIDE 82

Acknowledgments ¡

  • A ¡subset ¡of ¡the ¡previous ¡slides ¡have ¡been ¡

either ¡directly ¡taken ¡from ¡or ¡derived ¡from ¡ supplements ¡for ¡the ¡book: ¡

Building ¡Java ¡Programs: ¡A ¡Back ¡to ¡Basics ¡Approach, ¡ 2nd ¡edi:on ¡ by ¡Stuart ¡Reges ¡and ¡Marty ¡Stepp ¡

hmp://www.buildingjavaprograms.com/supplements.shtml ¡ ¡

82 ¡