BIT115: Introduction to Programming Lecture 13 Instructor: Craig Duckett Boolean Expressions, Logical Operators, and Return Values
DUE TONIGHT! Assignment 3: The Maze Assignment 3 Revision Uploaded to StudentTracker by midnight If you are submitting as part of a team make sure that all team member names are on both the .java program and .doc summary files. Also only one member of the team has to submit, but I will return the graded assignment to all members of the team. I've already graded several 'early bird' submissions Assignment 3 Revision DUE Lecture 16
Assignment Dates (By Due Date) Assignment 1 (LECTURE 5) GRADED! Section 1: Monday, January 22nd Assignment 2 (LECTURE 8) GRADED! Section 1: Wednesday, January 31st Assignment 1 Revision (LECTURE 10) GRADED! Section 1: Wednesday, February 7th Assignment 2 Revision (LECTURE 12) GRADED! Section 1: Wednesday, February 14th Assignment 3 (LECTURE 13) TONIGHT Section 1: Wednesday, February 21st Assignment 3 Revision (LECTURE 16) Section 1: Monday, March 5th Assignment 4 (LECTURE 18) NO REVISION AVAILABLE! Section 1: Monday, March 12th The Fickle Finger of Fate
Assignment 3: Maze Reminder This is what you turn in This is what I add to grade it I will also be testing with only 25 or 33 things in the backpack to start to make sure the Robot successfully completes the Maze even if the backpack is runs out of Things to put down.
Today’s Topics Boolean Expressions and Logical Operators && , || , ! Our First Look at Non-Robotic Code (Straight Java, No Chaser) Return Values: What Good Are They and How Do They Work?
…because of Mish-Mash and longer ICE TODAY NO “Warm-Up” Question… …because of Mish-Mash and longer ICE
Off Topic: REMEMBER: The World Wide Web is your GREATEST programming ALLY ! “ Google It ! ”
Boolean Expressions and Logical Operators Topic: Boolean Expressions and Logical Operators A Boolean Expression is an expression that results in a Boolean value, that is, in a value that is either true or false. More complex Boolean expressions can be built out of simpler expressions, using the Boolean Logical Operators.
Boolean Expressions and Comparison Operators Operation < Less than <= Less than or equal > Greater than >= Greater than or equal == Equal != Not equal Using Comparison Operators, the test in if and while statements are Boolean expressions that return a true or false answer to a question. So far, our questions have been simple. As our programming skills grow, however, we will want to ask more complex questions, which will need more complex Boolean expressions to answer. Just like the mathematic operators (+ - / *) can be combined to form more complex expressions like s = (( x + y) * (w – z)) / 2 so too can Boolean expressions be combined to create more complex and utility expressions using and ( represented by && ) and or ( represented by || )
Logical Operators: && (“And”) and II (“Or”) In many programming languages — like Java, JavaScript, C++, and C# — the logical operators ‘and’ and ‘or’ are represented in the code by a double ampersand && and double pipe || “And” && Double Ampersand “Or” || Double Pipe There is also the ‘not’ operator represented by a single exclamation point ! which I’ll talk about in a moment. “Not” ! Single Exclamation Point NOTE: Java also has a single & and single | characters, called bitwise operators, but for the purposes of this course we won’t be discussing them. These will come a bit later (pun intended) along your journey in learning programming languages.
Before We Continue: What Pipe Character ? Where is the pipe character | located on the keyboard? AN INTERESTING NOTE: The “pipe” character goes by several different names, depending on the particular group using it: besides being called the pipe, it can also be called the pipeline, vertical bar, Sheffer stroke, polon, verti-bar, vbar, stick, vertical line, vertical slash, bar, or glidus.
Logical Operators && || ! && || && || && || || AND A && B are true only if both A and B are true && OR A || B are true if A is true or B is true or they're both true || NOT !A is the opposite of A. If A is true, then !A is false. If A is false, !A is true. ! The double ampersand && and double pipe || are called “short circuit” logical operators AND Operator OR Operator TRUE TRUE TRUE TRUE TRUE TRUE && || TRUE FALSE FALSE TRUE FALSE TRUE && || FALSE TRUE FALSE FALSE TRUE TRUE && || FALSE FALSE FALSE ||
Logical Operator: Some Examples AND int a = 7; int b = 10; if( a > 4 && b < 20 ) { // This will be true since both operands of the && operator evaluate to true } OR int c = 10; int d = 40; if( c == 7 || d > c ) { // This will be true. Even though the first operand evaluates to false, // the second will evaluate to true. } NOT int e = 7; int f = 10; if( !(e == f) ) { // This will evaluate to true since e == f will be false, // and the NOT operator will reverse it } Example: LogicalOperatorsExample.java
Logical Operators: Checking Ranges
Logical Operators: Checking Ranges ///////////////////////////////////////////////////////////////////////////////////// // Example: Checks to see whether user input is INSIDE or OUTSIDE of a given range // ///////////////////////////////////////////////////////////////////////////////////// import java.util.*; public class CheckingRanges extends Object { public static void main(String[] args) { Scanner keyboard = new Scanner(System.in); System.out.println("Test to see if a number is a number between 1 and 10, inclusive.\n"); System.out.println("Please enter a number: \n"); if(keyboard.hasNextInt()) { int userInput = keyboard.nextInt(); // Testing with AND (&&) if(userInput > 0 && userInput < 11) { System.out.println("\nYour number " + userInput + " is between 1 & 10, inclusive.\n"); } // Testing with OR (||) if(userInput < 1 || userInput > 10) { System.out.println("\nYour number " + userInput + " is NOT between 1 & 10, inclusive.\n"); } } } } Example: CheckingRanges.java
Logical Operator: Gotchas int x = 5; if( 0 < x < 11) // Testing to see if x is in range of 1 to 10 { System.out.println("X is in range"); } int x = 5; if( x > 0 && < 11) // Testing to see if x is in range of 1 to 10 { System.out.println("X is in range"); }
Logical Operator: Gotchas int x = 5; if( x > 0 && x < 11) // Testing to see if x is in range of 1 to 10 { System.out.println("X is in range"); } So, remember: you need whatever you are comparing—whether variables or methods— listed on both sides of the logical operators. if( getStreet() > 0 && getStreet() < 11)
Logical Operator: Robotic Examples if(this.countThingsInBackpack() > 0 && this.frontIsClear()) { this.putThing(); this.move(); } // Notice the use of the wrapping parenthesis if((this.isFacingEast() || this.isFacingWest()) && this.frontIsClear()) { this.move(); } if( !(this.frontIsClear()) ) { this.turnLeft(); } Example: LogicalOperatorRobot.java
“Non-Robotic” Java Programming Topic: “Non-Robotic” Java Programming Writing Java programs without using the Becker Robot class or any robots in the code is now deemed “non-robotic.”
Start Looking for “Non-Robotic Java”* * Of course any new topics we learn under the heading ‘Non-Robotic Java’ can still be used when working with Robots, like Return Values and Static Methods, as we will see… Straight Java, No Chaser Starting today, we will begin introducing more “Non-Robotic Java” into the mix, which will find its way into the PowerPoint slides, some of the example code, several of the ICEs, and even one of the Assignments, Assignment 4 (Advanced). Example: LogicalOperatorsExample.java
The Return Statement and Return Values Topic: The Return Statement and Return Values
Return Values An Illustrated Introduction to Return Values First, a look at non-return… Up to now we’ve seen how to use void methods… public void moveMultiple(int numberOfIntersections) { int counter = 0; while( counter < numberOfIntersections) this.move(); counter = counter + 1; } You can pass an argument to a void method and it will do whatever it is meant to do, but nothing is returned as a separate value that the program might use later on. rob.moveMultiple(5);
Void: Means “Nothing is Returned” The meaning of “void” Up to now we’ve seen how to use void methods. 5 public void moveMultiple(int numberOfIntersections) { int counter = 0; while( counter < numberOfIntersections) this.move(); counter = counter + 1; } moveMultiple void means that nothing is returned back to the program; the method does something, it just doesn’t return something back into the program once it’s finished doing whatever it is it’s been doing. In other words, it is a closed method. …and down in main: rob.moveMultiple(5);
Two Types of “void” Method 1 Method 2 5 Nothing goes in, nothing comes out Something goes in, nothing comes out move(); moveMultiple(5);
Return: By Way of A Cooking Eggs Analogy The overEasy() method does exactly what it is supposed to do—it cooks the egg over easy, but that’s as far as it goes… customer.overEasy() kitchen class diningRoom class Alas, nothing is returned. Hungry customer not happy.
A Sad Scenario WTF? * * Where’s the food?
Cooking Eggs Analogy plate = customer.overEasy() egg.sunnySideUp() egg.overEasy() egg.overMedium() egg.overHard() egg.scrambled() egg.poached() egg.hardboiled() egg.softBoiled() plate = customer.overEasy() Hooray, overEasy() returns the cooked egg and puts it in the plate! Plate is now used to transport egg to happy customer!
A Happy Scenario Breakfast is served!
Return: The Return Type must be specified int will be returned public int countMoves( ) chugga-chugga int will be returned public int addSum(int num) chugga-chugga true or false will be returned return counter; public boolean isNorth(int num) int return sum; chugga-chugga int return true; The Return Value is a way to send the information back into the program so the program can use it in another way. true
We’ll visit these two code examples after the next slide… 3 Two Types of “Return” Method 1 Method 2 Nothing goes in, something comes out Something goes in, something comes out FileName.java FileName2.java We’ll visit these two code examples after the next slide…
Example: Nothing Goes In, Something Comes Out // Example of a method returning a value //////////////////////////////////////// class returnIt extends Object { public int returnYear() { int year = 2018; return year; } } public class methodReturn extends Object { public static void main(String[] args) { returnIt bernie = new returnIt(); int num; num = bernie.returnYear(); System.out.println(num); } } methodReturn.java
Example: Nothing Goes In, Something Comes Out // Example of a method returning a value //////////////////////////////////////// class returnIt extends Object { public int returnYear() { int year = 2018; return year; } } public class methodReturn extends Object { public static void main(String[] args) { returnIt bernie = new returnIt(); int num; num = bernie.returnYear(); System.out.println(num); } } Anatomy of a Method Return The returnYear() method is called by the bernie object The returnYear() method returns the value of year Value of year shoots of out the returnYear() method and deposited in the num variable container The value of num is printed out.
Example: Something Goes In, Something Comes Out // EXAMPLE: A number goes in, a revised number comes out class SumNum extends Object { public int Tally(int num) { int sum = 0; sum = num + 5; return sum; } } public class NumberTest extends Object { public static void main(String[] args) { SumNum sn = new SumNum(); int number = 0; number = sn.Tally(3); System.out.println(number); } } NumberTest.java
Walkthrough: FileName.java class PrintHelper extends Object { public int printNum() { System.out.println("Going to print, some number of times!"); int howManyPrints = 0; while(howManyPrints < 2) { System.out.println("Printing!"); howManyPrints++; // This is a basic counter } return howManyPrints; } } public class FileName extends Object { public static void main(String[] args) { PrintHelper Gutenberg = new PrintHelper(); int num; num = Gutenberg.printNum(); // This method is called by an object System.out.println( "The method printed " + num + " times!"); } }
Object (Instance of Class) “Idea / Attributes” class PrintHelper extends Object { public int printNum() { System.out.println("Going to print, some number of times!"); int howManyPrints = 0; while(howManyPrints < 2) { System.out.println("Printing!"); howManyPrints++; // This is a basic counter } return howManyPrints; } } public class FileName extends Object { public static void main(String[] args) { PrintHelper Gutenberg = new PrintHelper(); int num; num = Gutenberg.printNum(); System.out.println( "The method printed " + num + " times!"); } } Class Object (Instance of Class)
class PrintHelper extends Object { public int printNum() { System. out class PrintHelper extends Object { public int printNum() { System.out.println("Going to print, some number of times!"); int howManyPrints = 0; while(howManyPrints < 2) { System.out.println("Printing!"); howManyPrints++; // This is a basic counter } return howManyPrints; } } public class FileName extends Object { public static void main(String[] args) { PrintHelper Gutenberg = new PrintHelper(); int num = 0; num = Gutenberg.printNum(); System.out.println( "The method printed " + num + " times!"); } } howManyPrints num
class PrintHelper extends Object { public int printNum() { System. out class PrintHelper extends Object { public int printNum() { System.out.println("Going to print, some number of times!"); int howManyPrints = 0; while(howManyPrints < 2) { System.out.println("Printing!"); howManyPrints++; // This is a basic counter } return howManyPrints; } } 2 public class FileName extends Object { public static void main(String[] args) { PrintHelper Gutenberg = new PrintHelper(); int num; num = Gutenberg.printNum(); System.out.println( "The method printed " + num + " times!"); } } howManyPrints 2 2 num howManyPrints 2
Example Code: Return Let’s look at some more examples using return… NumberTest.java SumOfTwoNumbers.java AverageOfTwoNumbers.java RetrunValues_Demo.java
ICE 14: Logical Operators and Boolean Returns Before starting today’s ICE, you may want to look at the Boolean return examples: BooleanReturns1.java BooleanReturns2.java BooleanReturns3.java