Topic 22 arrays - part 2. Copyright Pearson Education, 2010 Based on slides by Marty Stepp and Stuart Reges from

Similar documents
You are to simulate the process by making a record of the balls chosen, in the sequence in which they are chosen. Typical output for a run would be:

Topic 11 Scanner object, conditional execution

Sorting Algorithms. Nelson Padua-Perez Bill Pugh. Department of Computer Science University of Maryland, College Park

MIDTERM 1 REVIEW WRITING CODE POSSIBLE SOLUTION

Introduction to Java

(Eng. Hayam Reda Seireg) Sheet Java

JAVA - METHODS. Method definition consists of a method header and a method body. The same is shown below:

Topic 16 boolean logic

Basics of Java Programming Input and the Scanner class

System.out.println("\nEnter Product Number 1-5 (0 to stop and view summary) :

Data Structures and Algorithms Written Examination

AP Computer Science File Input with Scanner

Scoping (Readings 7.1,7.4,7.6) Parameter passing methods (7.5) Building symbol tables (7.6)

Arrays. Atul Prakash Readings: Chapter 10, Downey Sun s Java tutorial on Arrays:

Java Basics: Data Types, Variables, and Loops

Dice. David Watkins Emily Chen Khaled Atef Phillip Schiffrin. djw2146 ec2805 kaa2168 pjs2186. Manager System Architect Testing Language Guru

Classes and Objects in Java Constructors. In creating objects of the type Fraction, we have used statements similar to the following:

Two-Dimensional Arrays. Multi-dimensional Arrays. Two-Dimensional Array Indexing

JAVA ARRAY EXAMPLE PDF

Object-Oriented Design Lecture 4 CSU 370 Fall 2007 (Pucella) Tuesday, Sep 18, 2007

CS 141: Introduction to (Java) Programming: Exam 1 Jenny Orr Willamette University Fall 2013

Chapter 7: Sequential Data Structures

In this Chapter you ll learn:

4.2 Sorting and Searching

Crash Course in Java

Pseudo code Tutorial and Exercises Teacher s Version

Decremental Development Regaining Simplicity in Software

Analysis of Binary Search algorithm and Selection Sort algorithm

Building Java Programs

Class : MAC 286. Data Structure. Research Paper on Sorting Algorithms

This loop prints out the numbers from 1 through 10 on separate lines. How does it work? Output:

Arrays in Java. Working with Arrays

Translating to Java. Translation. Input. Many Level Translations. read, get, input, ask, request. Requirements Design Algorithm Java Machine Language

AP Computer Science Java Mr. Clausen Program 9A, 9B

Parameter Passing in Pascal

MULTIPLE CHOICE. Choose the one alternative that best completes the statement or answers the question.

CS170 Lab 11 Abstract Data Types & Objects

Sample CSE8A midterm Multiple Choice (circle one)

Why? A central concept in Computer Science. Algorithms are ubiquitous.

Stacks. Stacks (and Queues) Stacks. q Stack: what is it? q ADT. q Applications. q Implementation(s) CSCU9A3 1

Debugging. Common Semantic Errors ESE112. Java Library. It is highly unlikely that you will write code that will work on the first go

C# and Other Languages

Masters programmes in Computer Science and Information Systems. Object-Oriented Design and Programming. Sample module entry test xxth December 2013

Functions Recursion. C++ functions. Declare/prototype. Define. Call. int myfunction (int ); int myfunction (int x){ int y = x*x; return y; }

1.4 Arrays Introduction to Programming in Java: An Interdisciplinary Approach Robert Sedgewick and Kevin Wayne Copyright /6/11 12:33 PM!

Example of a Java program

6. Standard Algorithms

Java Cheatsheet. Tim Coppieters Laure Philips Elisa Gonzalez Boix

Lecture Notes on Linear Search

First Java Programs. V. Paúl Pauca. CSC 111D Fall, Department of Computer Science Wake Forest University. Introduction to Computer Science

Section 6 Spring 2013

Basic Java Constructs and Data Types Nuts and Bolts. Looking into Specific Differences and Enhancements in Java compared to C

Introduction to Object-Oriented Programming

1) Which of the following is a constant, according to Java naming conventions? a. PI b. Test c. x d. radius

Java: overview by example

Introduction to Programming

Building Java Programs

Building Java Programs

Moving from CS 61A Scheme to CS 61B Java

Passing Arguments. A comparison among programming languages. Curtis Bright. April 20, 2011

Parameter Passing. Parameter Passing. Parameter Passing Modes in Fortran. Parameter Passing Modes in C

Licensed for viewing only. Printing is prohibited. For hard copies, please purchase from

Homework/Program #5 Solutions

PART-A Questions. 2. How does an enumerated statement differ from a typedef statement?

CSE373: Data Structures and Algorithms Lecture 3: Math Review; Algorithm Analysis. Linda Shapiro Winter 2015

Computer Science 210: Data Structures. Searching

The following program is aiming to extract from a simple text file an analysis of the content such as:

BSc (Hons) Business Information Systems, BSc (Hons) Computer Science with Network Security. & BSc. (Hons.) Software Engineering

Building Java Programs

Arrays. Introduction. Chapter 7

Building Java Programs

Cohort: BCA/07B/PT - BCA/06/PT - BCNS/06/FT - BCNS/05/FT - BIS/06/FT - BIS/05/FT - BSE/05/FT - BSE/04/PT-BSE/06/FT

CS 106 Introduction to Computer Science I

CompSci 125 Lecture 08. Chapter 5: Conditional Statements Chapter 4: return Statement

Contents. 9-1 Copyright (c) N. Afshartous

Problem 1. CS 61b Summer 2005 Homework #2 Due July 5th at the beginning of class

public static void main(string[] args) { System.out.println("hello, world"); } }

Chulalongkorn University International School of Engineering Department of Computer Engineering Computer Programming Lab.

Object Oriented Software Design

Comp 248 Introduction to Programming

Sample Questions Csci 1112 A. Bellaachia

1.00 Lecture 1. Course information Course staff (TA, instructor names on syllabus/faq): 2 instructors, 4 TAs, 2 Lab TAs, graders

CMSC 202H. ArrayList, Multidimensional Arrays

Symbol Tables. Introduction

Organization of Programming Languages CS320/520N. Lecture 05. Razvan C. Bunescu School of Electrical Engineering and Computer Science

J a v a Quiz (Unit 3, Test 0 Practice)

Iteration CHAPTER 6. Topic Summary

Install Java Development Kit (JDK) 1.8

Chapter 2: Elements of Java

CSE 1223: Introduction to Computer Programming in Java Chapter 7 File I/O

Object Oriented Software Design

Line-based file processing

Java Crash Course Part I

Biostatistics 615/815

Lecture 11: Tail Recursion; Continuations

2! Multimedia Programming with! Python and SDL

Programming Fundamentals I CS 110, Central Washington University. November 2015

JDK 1.5 Updates for Introduction to Java Programming with SUN ONE Studio 4

Using Files as Input/Output in Java 5.0 Applications

Transcription:

Topic 22 arrays - part 2 Copyright Pearson Education, 2010 Based on slides by Marty Stepp and Stuart Reges from http://www.buildingjavaprograms.com/

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;

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 0 1 2 3 4 5 value 11 89 42 0 27-5 27-5 42 0 89 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; 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;

Array reverse question 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 after reversal?...

Array parameter (declare) public static <type> <method>(<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>[] <method>(<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) <type>[] <name> = <method>(<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]

Reference semantics reading: 7.3 11

clicker 1 What is output by the following code? int[] data = {1, 5, 3; foo(data); System.out.print(Arrays.toString(data)); public static void foo(int[] d) { int temp = d[0]; d[0] = d[d.length - 1]; d[d.length - 1] = temp; System.out.print(Arrays.toString(d) + " "); A. [3, 5, 1] [1, 5, 3] B. [3, 5, 1] [3, 5, 1] C. [1, 5, 3] [1, 5, 3] D. [5, 3, 1] [1, 5, 3] E. Something else

clicker 2 What is output by the following code? int[] data = {1, 5, 3; bar(data); System.out.print(Arrays.toString(data)); public static void bar(int[] d) { d[0]++; d = new int[] {4, 6; System.out.print(Arrays.toString(d) + " "); A. [4, 6] [2, 5, 3] B. [4, 6] [ 4, 6] C. [1, 5, 3] [1, 5, 3] D. [2, 5, 3] [2, 5, 3] E. Something else

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;

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] a1 index 0 1 2 value 74 15 8 a2

References and objects 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. DrawingPanel panel1 = new DrawingPanel(80, 50); DrawingPanel panel2 = panel1; panel2.setbackground(color.cyan); // same window panel 1 panel 2

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); window public static void example(drawingpanel panel) { panel.setbackground(color.cyan);... panel

Copy of a reference Array variables are references A parameter is a copy of the same reference the argument stores. Changes made in the method to the elements 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] a iq index 0 1 2 value 126 252 167 334 190 95

Array reverse question 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); Solution: 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;

Array parameter questions 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 entire 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]

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;

Array return question 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]

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;

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