COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

38
COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014

Transcript of COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

Page 1: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110:Introduction to Programming

Tyler JohnsonMar 23, 2009

MWF 11:00AM-12:15PMSitterson 014

Page 2: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 20092

Questions?

Page 3: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 20093

Today in COMP 110

Review

Overloading

Programming Demo

Page 4: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 20094

Review

From last time

Page 5: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 20095

The Math Class

Provides many standard mathematical methodsAll methods are static, no need for an object of the Math class

Call methods of the Math class using class nameMath.absMath.maxMath.minMath.powMath.roundOthers

Predefined constantsMath.PIMath.E

Page 6: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 20096

Wrapper Classes

Each primitive type has an associated “Wrapper” class

ByteShortIntegerLongFloatDoubleCharacterBoolean

Page 7: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 20097

Writing Methods

Solving a problem using decomposition

Divide into subproblems (pseudocode)Solve each subproblem separately as a methodUse the methods you’ve created to solve the problem

Page 8: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 20098

Review

More broadly

Page 9: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 20099

Calling Methods within Methods

It’s possible to call methods within other methods

If calling a method of the same class, no need to specify receiving object

public class Example {

public void method1() { method2(); //no object needed, current object assumed}

public void method2() { //do something}

}

Page 10: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 200910

Calling Methods within Methods

public class Example {

public void method1() {System.out.println("method1!");method2(); //no object needed, current object assumed

}

public void method2() {System.out.println("method2!");

}

public static void main(String[] args) {Example example = new Example(); //create object of class

Exampleexample.method1();

}}

Page 11: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 200911

Input to Methods

The input to a method is in the form of arguments

public class Account {private double balance;private double limit;

public void addPurchase(double amount) { if(balance + amount <= limit)

balance = balance + amount; //only add if the transaction //is valid}

}

The value is filled in by whomever calls the method

Page 12: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 200912

Input to Methods

public class Account {private double balance;private double limit;

public void addPurchase(double amount) { if(balance + amount <= limit)

balance = balance + amount; //only add if the transaction is valid}

}

public class AccountTester {

public static void main(String[] args) { Account accnt = new Account(); account.addPurchase(15.); //call addPurchase and w/ 15 for the amount account.addPurchase(20.); //call addPurchase and w/ 20 for the amount}

}

Separate Java Files!

A Driver program (Used for testing)

Page 13: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 200913

Input to Methods

NEVER do this

public class Account {private double balance;private double limit;

public void addPurchase(double amount) { Scanner keyboard = new Scanner(System.in);

amount = keyboard.nextDouble();

if(balance + amount <= limit) balance = balance + amount; //only add if the transaction is

valid}

}

Overwriting the value that was passed in!

Page 14: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 200914

Methods that Return a Value

public class Account {private double balance;private double limit;

//a helper method to determine if a transaction is validprivate boolean transactionValid(double amount) { if(balance + amount <= limit)

return true; else

return false;}

public void addPurchase(double amount) { boolean valid = transactionValid(amount); //is the transaction valid?

if(valid) balance = balance + amount; //only add if the transaction is

valid}

}

Page 15: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 200915

Method Calls in If-Statements

public class Account {private double balance;private double limit;

//a helper method to determine if a transaction is validprivate boolean transactionValid(double amount) { if(balance + amount <= limit)

return true; else

return false;}

public void addPurchase(double amount) {

if(transactionValid(amount)) balance = balance + amount; //only add if the transaction is

valid}

}

Call to a method inside an if-statement

Page 16: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 200916

Booleans

There’s no need to write

if(systemsGo == true)System.out.println("Launch");

if(transactionValid(amount) == true)System.out.println("Accepted");

The more concise and equivalent way is

if(systemsGo)System.out.println("Launch");

if(transactionValid(amount))System.out.println("Accepted");

Page 17: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 200917

Overloading

Section 6.4 in text

Page 18: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 200918

Overloading

public class InputOne {

public void readInput() {…

}}

public class InputTwo {

public void readInput() {…

}}

public static void main(String[] args) {

InputOne iOne = new InputOne();

InputTwo iTwo = new InputTwo();

iOne.readInput(); //readInput method of class InputOne

iTwo.readInput(); //readInput method of class InputTwo

}

•Methods in different classes can have the same name

Page 19: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 200919

Overloading

Methods in the same class can also have the same name

This is called overloading

Distinguished by the number & types of the parameters

Page 20: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 200920

Overloading Example

public class Average {

//average two valuespublic double getAverage(double a, double b) { return (a + b) / 2.;}

//average three valuespublic double getAverage(double a, double b, double c) { return (a + b + c) / 3.;}

}

Page 21: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 200921

Overloading

You have already been using overloaded methods

System.out.print(7); //print an integerSystem.out.print('7'); //print a characterSystem.out.print("seven"); //print a stringSystem.out.print(7.0); //print a double

Page 22: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 200922

Other Overloading Examples

The Math classdouble Math.max(double a, double b)int Math.max(int a, int b)long Math.max(long a, long b)

Allows the followingint m = Math.max(1,3);double d = Math.max(5.6, 5.7);

Page 23: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 200923

Overloading

Any kind of method can be overloaded

Void methodsMethods returning a valueStatic methodsNon-static methodsConstructors

Page 24: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 200924

Constructor Overloading

public class Pet {

private String name; private int age; private double weight;

public Pet() { name = “No name yet.”; age = 0; weight = 0; }

public Pet(String initName, int initAge, double initWeight) { name = initName; age = initAge; weight = initWeight; }}

Pet myPet = new Pet();

Pet myPet = new Pet("Fang", 12, 10.);

Page 25: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 200925

Method Signatures

A method’s signature consists of Method nameNumber of parametersTypes of parameters

Example

public double getAverage(double a, double b) { … }

Signature• Name: getAverage• NumParams: 2• Param Types:

– Param1: double– Param2: double

Return type is NOT considered part of the signature!

Page 26: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 200926

Method Signatures

Java does not allow you to define two methods with the same signature in the same class

Examples//these two are the samefloat getAverage(float a, float b)double getAverage(float a, float b)

//these two are differentfloat getAverage(float a, float b)double getAverage(double a, double b)

Page 27: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 200927

Automatic Type Conversion

Recall that automatic type conversion can sometimes occur with method calls

double square(double x) {

return x*x; //square the argument and return it

}

We can call this method as followssquare(7.0); //returns 49.0

square(7); //also returns 49.0, auto type conversion

Page 28: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 200928

The situation gets more complicated with overloading

public class Example {

double square(double x) { return x*x; }

int square(int x) { return x*x; } public static void main(String[] args) { Example e = new Example(); e.square(7.0); e.square(7); }}

Interaction with Overloading

Which method is being called?

Page 29: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 200929

Overloading/Type Conversion

Java will always use a method that is an exact match before it attempts type conversion

Page 30: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 200930

Exact Overloading Match

public void example(int i, double d, char c) {…}

Are these calls to example an exact match?

example(23, 55, 'c');

example(88, 76.0, ';');

example(4.0, 25, '!');

No. Automatic type conversion used

Yes. No need for Automatic type conversion

No. Automatic type conversion not possible

Page 31: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 200931

Ambiguous Method Calls

Java will only perform type conversion if the method call is unambiguous

There is only ONE method for which automatic type conversion can be used to find a match

Page 32: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 200932

Ambiguous Method Calls

public class Example {

double sum(int a, double b) { return a + b; }

double sum(double a, int b) { return a + b; }

public static void main(String[] args) { Example e = new Example(); e.sum(7, 7); //error, this method call is ambiguous e.sum(7, 7.0); //this is ok e.sum(7.0, 7); //this is ok }}

Page 33: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 200933

In Summary

How Java determines which method you intend to call

Exact Match?

Use the Method

Unambiguous Match using Type

Conversion?

Use the Method

Error

Match Based on Method Name, Num & Types of

Parameters

Page 34: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 200934

Use of Overloading

Misuse of overloading can lead to strange bugsUse only with good reason

public Pet(double initWeight) { //constructor for weightweight = initWeight;

}

public Pet(int initAge) { //constructor for ageage = initAge;

}

public static void main(String[] args) {Pet myPet = new Pet(10); //meant to set weight, set age instead

}

Page 35: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 200935

Programming Demo

Room Occupancy

Create a class called Room that can be used to record the number of people in the rooms of a building

Page 36: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 200936

Room Occupancy

AttributesnumberInRoom – the number of people in a roomtotalNumber – the total number of people in all rooms as a static variable

Methodsdefault constructor – sets number of people in room to 0addOneToRoom – add a person to the roomremoveOneFromRoom – remove a person from the room (don’t go below 0 persons)getNumber – returns the number of people in the roomgetTotal – a static method that returns the total number of people in all roomsvalidRemoval(int num) – returns whether num people can be removed from the room

Page 37: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 200937

Programming Demo

Programming

Page 38: COMP 110: Introduction to Programming Tyler Johnson Mar 23, 2009 MWF 11:00AM-12:15PM Sitterson 014.

COMP 110: Spring 200938

Wednesday

Array Basics (Section 7.1)