Lecture 13: More Arrays Building Java Programs: A Back to Basics Approach by Stuart Reges and Marty Stepp Copyright (c) Pearson 2013. All rights reserved.

Slides:



Advertisements
Similar presentations
Copyright 2010 by Pearson Education Building Java Programs Chapter 7 Lecture 7-2: Arrays as Parameters reading: , 3.3 self-checks: Ch. 7 #5, 8,
Advertisements

1 Various Methods of Populating Arrays Randomly generated integers.
Copyright 2008 by Pearson Education Building Java Programs Chapter 7 Lecture 7-3: File Output; Reference Semantics reading: , 7.1, 4.3, 3.3 self-checks:
Building Java Programs Chapter 7 Arrays. 2 Can we solve this problem? Consider the following program (input underlined): How many days' temperatures?
CS 106 Introduction to Computer Science I 03 / 03 / 2008 Instructor: Michael Eckmann.
CS 106 Introduction to Computer Science I 03 / 08 / 2010 Instructor: Michael Eckmann.
CS 106 Introduction to Computer Science I 10 / 15 / 2007 Instructor: Michael Eckmann.
1 Reference semantics. 2 A swap method? Does the following swap method work? Why or why not? public static void main(String[] args) { int a = 7; int b.
Copyright 2006 by Pearson Education 1 Building Java Programs Chapters 3-4: Using Objects.
Building Java Programs Chapter 7 Arrays Copyright (c) Pearson All rights reserved.
Arrays Chapter 8. What if we need to store test scores for all students in our class. We could store each test score as a unique variable: int score1.
Building Java Programs Chapter 7 Arrays Copyright (c) Pearson All rights reserved.
CS 112 Introduction to Programming Arrays; Loop Patterns (break) Yang (Richard) Yang Computer Science Department Yale University 308A Watson, Phone:
Topic 22 arrays - part 2 Copyright Pearson Education, 2010 Based on slides bu Marty Stepp and Stuart Reges from
1 Building Java Programs Chapter 7: Arrays These lecture notes are copyright (C) Marty Stepp and Stuart Reges, They may not be rehosted, sold, or.
Building Java Programs Chapter 7
1 Building Java Programs Chapter 3: Introduction to Parameters and Objects These lecture notes are copyright (C) Marty Stepp and Stuart Reges, They.
EE 422C Day 2 Java, Eclipse. Copyright Pearson Education, 2010 Based on slides bu Marty Stepp and Stuart Reges from
Copyright 2010 by Pearson Education Building Java Programs Chapter 7 Lecture 7-2: Arrays as Parameters reading:
Building Java Programs Chapter 7 Arrays Copyright (c) Pearson All rights reserved.
CS 106 Introduction to Computer Science I 03 / 02 / 2007 Instructor: Michael Eckmann.
Copyright 2008 by Pearson Education Building Java Programs Chapter 7 Lecture 7-3: Arrays as Parameters; File Output reading: 7.1, 4.3, 3.3 self-checks:
1 reading: 3.3 Using objects. Objects So far, we have seen: methods, which represent behavior variables, which represent data (categorized by types) It.
Building Java Programs Chapter 7 Arrays Copyright (c) Pearson All rights reserved.
Topic 21 arrays - part 1 Copyright Pearson Education, 2010 Based on slides by Marty Stepp and Stuart Reges from "Should.
Building Java Programs Chapter 7 Arrays Copyright (c) Pearson All rights reserved.
Lecture 3: Method Parameters
CSCI 162 – Introduction to Programming II William Killian
Building Java Programs
Building Java Programs
Dr. Kyung Eun Park Summer 2017
CSc 110, Autumn 2017 Lecture 23: lists as Parameters
Building Java Programs
Arrays Part 1 Topic 19 - Stan Kelly-Bootle
Array traversals, text processing
CSE 143 Lecture 9 References and Linked Nodes reading: 3.3; 16.1
Building Java Programs
Building Java Programs
Building Java Programs Chapter 7
Pass by Reference, const, readonly, struct
CSc 110, Spring 2017 Lecture 19: more with lists
CSE 143 Lecture 9 References and Linked Nodes reading: 16.1
Building Java Programs
Building Java Programs
CSE 143 Lecture 1 Review: Arrays and objects
Building Java Programs
CSc 110, Autumn 2016 Lecture 19: lists as Parameters
CSE 143 Lecture 6 References and Linked Nodes reading: 16.1
Topic 22 arrays - part 2 Copyright Pearson Education, 2010 Based on slides by Marty Stepp and Stuart Reges from
Defining methods and more arrays
Why did the programmer quit his job?
Building Java Programs
Building Java Programs Chapter 7
CSc 110, Spring 2018 Lecture 23: lists as Parameters
Lecture 9: Arrays Building Java Programs: A Back to Basics Approach
Lecture 3: Method Parameters
Lecture 10: Arrays AP Computer Science Principles
Lecture 12: 2D Arrays AP Computer Science Principles
Lecture 10: Arrays II Building Java Programs: A Back to Basics Approach by Stuart Reges and Marty Stepp Copyright (c) Pearson All rights reserved.
Building Java Programs
Why did the programmer quit his job?
CSE 143 Lecture 5 References and Linked Nodes
Suggested self-checks: Section 7.11 #1-11
Building Java Programs
Building Java Programs
Building Java Programs
Building Java Programs
Lecture 6: References and linked nodes reading: 16.1
CSE 143 Lecture 7 References and Linked Nodes reading: 16.1
Building Java Programs
Presentation transcript:

Lecture 13: More Arrays Building Java Programs: A Back to Basics Approach by Stuart Reges and Marty Stepp Copyright (c) Pearson 2013. All rights reserved.

Largest Value public int largest(int[] array){ int largest=array[0]; Given an array, return the largest value of the array. public int largest(int[] array){ int largest=array[0]; for(int i=1;i<array.length;i++){ if(array[i]>largest) largest=array[i]; } return largest;

Smallest Value if(array[i]<array[index]) index=i; } return index; Given an array, return the index of the smallest value of the array. public int smallestIndex(int[] array){ int index=0; for(int i=1;i<array.length;i++){ if(array[i]<array[index]) index=i; } return index; Note: This algorithm(and its variants) almost always show up on the AP free response section. Please know and memorize it!

Reference semantics 4 4

Swapping values The red code should be replaced with: 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; b = temp;

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; It's basically not possible to write a swap method that accepts two ints. swap can't escape from itself to modify the outside world. (sort of like the villains in the holodeck on Star Trek; they can wreak havoc in their holo-world, but they can't leave and attack the real Enterprise outside.)

Value semantics value semantics: Behavior where values are copied when assigned, passed as parameters, or returned. All primitive types in Java use value semantics. 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

Reference semantics (objects) reference semantics: 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 7 15 8 index 1 2 value 4 15 8 a1 a2

Objects as parameters Arrays and objects use reference semantics. Why? efficiency. Copying large objects slows down a program. sharing. It's useful to share an object's data among methods. 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. Arrays are passed as parameters by reference. Changes made in the method are also seen by the caller. Note: This is also the reason that it works when you pass the Graphics g as a parameter to a method, because it is drawing with the same pen object onto the same window.

Value Semantics Example: public static void triple(int number) { number=number*3; } public static void main(String[] args) { int x = 2; triple(x); System.out.println(x); // 2

Reference Semantics Example: public static void triple(int[] numbers) { for (int i = 0; i < numbers.length; i++) { numbers[i]=numbers[i]*3; } public static void main(String[] args) { int[] arr = {0,1,2,3}; triple(arr); System.out.println(Arrays.toString(arr)); //{0,3,6,9}

Arrays as parameters

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

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); } ... Notice that you don't write the [] when passing the array.

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;

Array return (call) Example: type[] name = methodName(parameters); 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]

Array reversal question Write code that reverses the elements of an array. For example, if the array initially stores: [11, 42, -5, 27, 0, 89] Then after 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...

Algorithm idea Swap pairs of elements from the edges; work inwards: index 1 2 3 4 5 value 89 27 -5 42 11 index 1 2 3 4 5 value 89 -5 27 42 11 index 1 2 3 4 5 value 11 42 -5 27 89 index 1 2 3 4 5 value 89 42 -5 27 11

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

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

Array reverse question 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);// {89, 0, 27, -5, 42, 11} Solution: public static void reverse(int[] x) { for (int i = 0; i < x.length / 2; i++) { int temp = x[i]; x[i] = x[x.length - 1 - i]; x[x.length - 1 - i] = temp; }

Array of Objects The Student class is given below without implementation. public class Student{ private String name; private double average; public Student(String a, double ave){} public String getName(){} public double getAverage(){} } 1) Create an array of 10 Student objects. Student[] list=new Student[10]; 2) Print the name of the first student on the list. System.out.print(list[0].getName());

A Popular AP Exam Question Write the method highestAverage which accepts an array of Students returns the highest average of all of the students. public static double highestAverage(Student[] array) double highest=array[0].getAverage(); for(int i=1;i<array.length;i++){ if(array[i].getAverage()>highest) highest=array[i].getAverage(); } return highest;

A Popular AP Exam Question Here’s another popular variant to the last question. Write the method bestStudent which accepts an array of Students returns the name of the student with the highest average. If there are more than one student with the highest average, returns the first in the list. public static String bestStudent(Student[] array){ int index=0; for(int i=1;i<array.length;i++){ if(array[i].getAverage()>array[index].getAverage()) index=i; } return array[index].getName();;

Lab Write a method computeOdd that accepts an array of integers and returns the sum of all odd values in the array. int[] a1 = {11, 34, 5, 17, 56}; int a2 = computeOdd(a1); //a2=11+5+17=33 I probably won't reach this in lecture; it's here just in case.

Lab Write a method swapAll that accepts two arrays of integers as parameters and swaps their entire contents. You have to use a loop to swap individual elements. 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]

Lab 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] I probably won't reach this in lecture; it's here just in case.