Download presentation
Presentation is loading. Please wait.
Published byVanessa Stevenson Modified over 8 years ago
1
Peter Andreae Computer Science Victoria University of Wellington Copyright: Peter Andreae, Victoria University of Wellington Methods with Parameters COMP 102 #6 2011
2
© Peter Andreae COMP102 6:2 Menu Reflection.txt Methods with parameters Methods that return values Methods that call other methods in the same program Administrivia: Optional Tutorial, Friday 4-5 CO LT118 Broken Computer System! (maybe because the 2nd year were logging in for the first time) Deciding if the course is not for you.
3
© Peter Andreae COMP102 6:3 Reflection.txt #1 Some good answers Categories of commands: "A) Output : Println method B) Input : ask.String method C) Drawing : setColor, fillOval, drawString, drawArc I guess drawing category can be included in output category." Import commands: Tell the compiler which libraries to look in for the functions used in the code. Input commands: For instance, UI.askString: ask the user for input. Output commands: Fall into two categories, text-based outputs and graphics- based outputs. UI.println() UI.drawString() deal with string output while UI.draw* commands deal with drawing geometric shapes. Declarations of classes and methods - i.e. public class and public void - these commands structure the program.
4
© Peter Andreae COMP102 6:4 Reflection.txt #1 Checking a Mouse program: "Ensure that the mouse encountered; a dead end, a left turn, a right turn, a 4 way intersection and a 3 way intersection from all the approaches." "I would test his instructions on the mouse in every 9x9 grid combination possible." "I would design mazes that fit certain problematic situations: for instance, T-instersections that the mouse had to navigate, both left and right as well as directly in front. If the mouse solved those mazes I would test it against a maze with a four-way intersection and make sure that it would go down each of the paths at some point. I would also construct a maze with a fork in which both paths end in dead- ends; in order to escape the mouse must go back down the path that it originally came from. For thoroughness, I would make a list of all the possible maze features and test the mouse against each of them."
5
© Peter Andreae COMP102 6:5 Variables to specify face & hat center top faceWd faceHt hatWd brimYhatHt
6
© Peter Andreae COMP102 6:6 Improving the program /** Draw an orange face with a brimmed hat*/ public void faceWithHat() { double center = 250;// horizontal center of face double top = 100;// top of face double faceWd = 100; double faceHt = 1.5 * faceWd; double hatHt = 0.3 * faceHt; double hatWd = 0.96 * faceWd; double brimWd = 1.6 * hatWd; double brimY = top + 0.25 * faceHt; UI.setColor(Color.orange); UI.fillOval(center-faceWd/2, top, faceWd, faceHt); // face UI.setColor(Color.green); UI.fillRect(center-hatWd/2, brimY-hatHt, hatWd, hatHt); // hat crown UI.drawLine(center-brimWd/2, brimY, center+brimWd/2, brimY)//brim }
7
© Peter Andreae COMP102 6:7 Principle of good design Use well named variables where-ever possible, rather than literal values ⇒ easier to understand ⇒ easier to get right ⇒ much easier to modify Choosing the right variables is an art!! why did I choose "center" instead of "faceLeft" or "brimLeft" ? why did I choose "top" to be the top of the face, not the hat? We have effectively parameterised the drawing three values (center, top, faceWd) control the whole thing.
8
© Peter Andreae COMP102 6:8 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
9
© Peter Andreae COMP102 6:9 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 center, double top, double faceWd ){ double faceHt = 1.5 * faceWd; double hatHt = 0.3 * faceHt; double hatWd = 0.96 * faceWd; double brimWd = 1.6 * hatWd; double brimY = top + 0.25 * faceHt; UI.setColor(Color.orange); UI.fillOval(center-faceWd/2, top, faceWd, faceHt); // face UI.setColor(Color.green); UI.fillRect(center-hatWd/2, brimY-hatHt, hatWd, hatHt); // hat crown UI.drawLine(center-brimWd/2, brimY, center+brimWd/2, brimY);//brim }
10
© Peter Andreae COMP102 6:10 Method Definitions (2) /** Print out the conversion formulas */ public void faceWithHat( double center, double top, double faceWd ){ double faceHt = 1.5 * faceWd; : 〈 Comment 〉〈 Header 〉〈 Body 〉 {} public void 〈 parameters 〉 () 〈 name 〉 〈 type 〉, 〈 name 〉 How do you call a method with parameters from BlueJ?
11
© Peter Andreae COMP102 6:11 Method Definition: Like a pad of worksheets Calling a Method: Drawer1.faceWithHat(300, 100, 75); ⇒ 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 center, double top, double faceWd ){ double faceHt = 1.5 * faceWd; double hatHt = 0.3 * faceHt; : UI.fillOval(center-faceWd/2, top, faceWd, faceHt); } public void faceWithHat( double center, double top, double faceWd ){ double faceHt = 1.5 * faceWd; double hatHt = 0.3 * faceHt; : UI.fillOval(center-faceWd/2, top, faceWd, faceHt); } 300 0100 0 75 0
12
© Peter Andreae COMP102 6:12 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?
13
© Peter Andreae COMP102 6:13 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)
14
© Peter Andreae COMP102 6:14 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
15
© Peter Andreae COMP102 6:15 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.
16
© Peter Andreae COMP102 6:16 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. ????????
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.