Presentation is loading. Please wait.

Presentation is loading. Please wait.

Peter Andreae Computer Science Victoria University of Wellington Copyright: Peter Andreae, Victoria University of Wellington Methods with Parameters COMP.

Similar presentations


Presentation on theme: "Peter Andreae Computer Science Victoria University of Wellington Copyright: Peter Andreae, Victoria University of Wellington Methods with Parameters COMP."— Presentation transcript:

1 Peter Andreae Computer Science Victoria University of Wellington Copyright: Peter Andreae, Victoria University of Wellington Methods with Parameters COMP 102 #6 2013

2 © Peter Andreae COMP102 6:2 Menu Reflection.txt Designing Methods with parameters Methods that call other methods in the same program Administration: ECS Girls: 1-2 today (did you get the email?) Optional Tutorial, Monday 12-1 MY 632 Make-up lab: today 3-5 CO 242/243 Today is the deadline for adding or dropping with refund Online help: forum vs email/web form Working together.

3 © Peter Andreae COMP102 6:3 Reflection.txt for Assig 1 Categories of commands: User input dataegString name = UI.askString(""); Text outputegUI.println(""); Graphical controllersegUI.clearGraphics, UI.draw____ Checking a MouseMaze solution: I would check over their proposal through trying to discover where it would fail, rather than ways it would work. I would look for circumstances as to when the mouse would loop. It would be important to see how the mouse dealt with different combinations of turns; especially when there are several options the mouse could take. A dead end would also have to be incorporated into these turns. Checking that the mouse could cope with a larger open space would also be included.

4 © Peter Andreae COMP102 6:4 Values to specify face & hat centerX top width height hatBot hatHt centerY left

5 © Peter Andreae COMP102 6:5 Improving the program: constants import comp102.*; import java.awt.Color; /** Draws face with a hat on the graphics pane */ public class Drawer { public static final double centerX = 250;// horizontal center of face public static final double centerY= 180;// vertical center of face public static final double width = 100; public static final double height = 160; public static final double left = centerX–width/2; public static final double top = centerY–height/2; public static final double hatHt = 0.25 * height; public static final double hatBot = top +hatHt; public static final double brimLt = centerX–0.8*width; public static final double brimRt = centerX+0.8*width;

6 © Peter Andreae COMP102 6:6 Improving the program: constants import comp102.*; import java.awt.Color; /** Draws face with a hat on the graphics pane */ public class Drawer { public static final double centerX = 250;// horizontal center of face ⋮ public static final double brimLt = centerX – 0.8 * width; public static final double brimRt = centerX + 0.8 * width; /** Draw an orange face with a brimmed hat*/ public void faceWithHat() { UI.setColor(Color.orange); UI.fillOval(left, top, width, height);// face UI.setColor(Color.green); UI.fillRect(left, top, width, hatHt); // hat crown UI.drawLine(brimLt, hatBot, brimRt, hatBot) //brim

7 © Peter Andreae COMP102 6:7 Syntax rules: Program structure 2nd version 〈import statements 〉 public class 〈 method descriptions 〉 { } 〈 classname 〉 〈 constants 〉

8 © Peter Andreae COMP102 6:8 Improving the program: variables /** Draw an orange face with a brimmed hat*/ public void faceWithHat() { double centerX = 250;// horizontal center of face double centerY= 180;// vertical center of face double width= 100; double height = 150; double left = centerX–width/2, double top = centerY–height/2; double hatHt = 0.25 * height; double hatBot = centerY – 0.25 * height; double brimLt = centerX – 0.8 * width,brimRt = centerX + 0.8 * width; UI.setColor(Color.orange); UI.fillOval(left, top, width, height);// face UI.setColor(Color.green); UI.fillRect(left, top, width, hatHt); // hat crown UI.drawLine(brimLt, hatBot, brimRt, hatBot) //brim } Can declare and initialise multiple variables on one line

9 © Peter Andreae COMP102 6:9 Principle of good design Use well named constants or variables whereever possible, rather than literal values ⇒ easier to understand ⇒ easier to get right ⇒ much easier to modify Choosing the right constants or variables is an art!! why did I choose "centerX" instead of “right" or "brimLt" ? why did I choose "centerY" to be the center of the face, not the hat? We have effectively parameterised the drawing Four values (centerX, centerY, width, height) control the whole thing.

10 © Peter Andreae COMP102 6:10 Even better design: parameters Every time we want a face of a different size or in a different position, we have to modify the code. How come we don't have to do that with drawRect? drawRect has four parameters: Definition of drawRect: void drawRect(double left, double top, double wd, double ht) Calling drawRect: UI.drawRect(200, 150, 50, 80), ⇒ drawRect can make many different rectangles. Why can't we do that with faceWithHat? Parameters Arguments

11 © Peter Andreae COMP102 6:11 Giving faceWithHat parameters List the parameters in the header of the method definition: /** Draw an orange face with a brimmed hat*/ public void faceWithHat(double x, double y, double width, double height){ double left = x – width / 2; double top = y – height/ 2; double hatHt = 0.25 * height; double hatBot = y – 0.25 * height; double brimLt = x – 0.8 * width; double brimRt = x + 0.8 * width; UI.setColor(Color.orange); UI.fillOval(left, top, width, height);// face UI.setColor(Color.green); UI.fillRect(left, top, width, hatHt); // hat crown UI.drawLine(brimLt, hatBot, brimRt, hatBot) //brim } Can call method with different arguments. Do it

12 © Peter Andreae COMP102 6:12 Syntax: Method Definitions (v2) /** Draw an orange face with a brimmed hat */ public void faceWithHat(double x, double y, double width, double height ){ double left = x – width / 2; : 〈 Comment 〉〈 Header 〉〈 Body 〉 {} public void 〈 parameters 〉 () 〈 name 〉 〈 type 〉, 〈 name 〉 How do you call a method with parameters from BlueJ?

13 © Peter Andreae COMP102 6:13 Method Definition: Like a pad of worksheets Calling a Method: Drawer1.faceWithHat(300, 100, 75, 95); ⇒ get a “copy” of the method worksheet ⇒ copy the arguments to the parameter places ⇒ perform each action in the body ⇒ throw the worksheet away (losing all the information on it) Method Calls with parameters public void faceWithHat( double x, double y, double faceWd, double faceHt ){ double faceLeft = x – faceWd / 2; double faceTop= y – faceHt / 2; : UI.fillOval(faceLeft, faceTop, faceWd, faceHt); } public void faceWithHat( double x, double y, double faceWd, double faceHt ){ double faceLeft = x – faceWd / 2; double faceTop= y – faceHt / 2; : UI.fillOval(faceLeft, faceTop, faceWd, faceHt); } 300 0100 0 75 0 95 0

14 © Peter Andreae COMP102 6:14 Many faces We can write a method that calls faceWithHat multiple times: /** Draw four faces */ public void fourFaces ( ) { UI.clearGraphics(); this.faceWithHat(100, 200, 70, 110); this.faceWithHat(250, 200, 70, 90); this.faceWithHat(400, 200, 50, 130); this.faceWithHat(550, 200, 90, 150); } this is the object that the current method was called on. ????????

15 © Peter Andreae COMP102 6:15 Principle of good design Parameterising a method makes it more flexible and general Allows us to call the same method with different arguments to do the same thing in different ways Allows us to reuse the same bit of code

16 © Peter Andreae COMP102 6:16 Another Java Program Design a Java program to measure reaction time of users responding to true and false "facts". Ask the user about a fact: "Is it true that the BE is a 4 Year degree?" Measure the time they took Print out how much time. Need a class what name? Need a method what name? what parameters? what actions?

17 © Peter Andreae COMP102 6:17 ReactionTimeMeasurer /** Measures reaction times for responding to true-false statements */ public class ReactionTimeMeasurer { /** Measure and report the time taken to answer a question */ public void measureTime() { // find out the current time and remember it // ask the question and wait for answer // find out (and remember) the current time // print the difference between the two times } } Write the method body in comments first, (to plan the method without worrying about syntax) Work out what information needs to be stored (ie, variables)

18 © Peter Andreae COMP102 6:18 ReactionTimeMeasurer /** Measures reaction times for responding to a true-false statement */ public class ReactionTimeMeasurer { /** Measure and report the time taken to answer a question */ public void measureTime() { long startTime = System.currentTimeMillis(); String ans =UI.askString("Is it true that the BE is a 4 year degree"); long endTime = System.currentTimeMillis(); UI.println("You took " + (endTime - startTime) +" milliseconds"); } } currentTimeMillis() is a method that returns a long value Better design: make measureTime work on any fact: very big integers

19 © Peter Andreae COMP102 6:19 Improving ReactionTimeMeasurer (1) /** Measures reaction times for responding to true-false statements */ public class ReactionTimeMeasurer { /** Measure and report the time taken to answer a question */ public void measureTime(String fact) { long startTime = System.currentTimeMillis(); String ans =UI.askString("Is it true that" + fact); long endTime = System.currentTimeMillis(); UI.println("You took " + (endTime - startTime) +" milliseconds"); } } Just asking one question is not enough for an experiment.  need to ask a sequence of questions.

20 © Peter Andreae COMP102 6:20 Improving ReactionTimeMeasurer (2) Need method that calls the measureTime method repeatedly public class ReactionTimeMeasurer { public void askFourQuestions() { this.measureTime("John Quay is the Prime Minister"); this.measureTime("11 x 13 = 143"); this.measureTime("Summer is warmer than Winter"); this.measureTime("Wellington has over 1,000,000 people"); } public void measureTime(String fact) { long startTime = System.currentTimeMillis(); String ans =UI.askString("Is it true that" + fact); long endTime = System.currentTimeMillis(); UI.println("You took " + (endTime - startTime) +" milliseconds"); } } this is the object that the current method was called on.


Download ppt "Peter Andreae Computer Science Victoria University of Wellington Copyright: Peter Andreae, Victoria University of Wellington Methods with Parameters COMP."

Similar presentations


Ads by Google