Topic 16 boolean logic



Similar documents
Building Java Programs

Building Java Programs

Topic 11 Scanner object, conditional execution

Building Java Programs

Sample CSE8A midterm Multiple Choice (circle one)

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

Introduction to Java

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

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

Building Java Programs

Building Java Programs

if and if-else: Part 1

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

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

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

Chapter 5. Selection 5-1

Introduction to Computer Programming, Spring Term 2014 Practice Assignment 3 Discussion

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

Boolean Expressions, Conditions, Loops, and Enumerations. Precedence Rules (from highest to lowest priority)

Chapter 2 Introduction to Java programming

CS 121 Intro to Programming:Java - Lecture 11 Announcements

COSC Introduction to Computer Science I Section A, Summer Question Out of Mark A Total 16. B-1 7 B-2 4 B-3 4 B-4 4 B Total 19

13 File Output and Input

Chapter 8 Selection 8-1

JAVA ARRAY EXAMPLE PDF

Introduction to Programming (in C++) Loops. Jordi Cortadella, Ricard Gavaldà, Fernando Orejas Dept. of Computer Science, UPC

Example. Introduction to Programming (in C++) Loops. The while statement. Write the numbers 1 N. Assume the following specification:

AP Computer Science File Input with Scanner

The C++ Language. Loops. ! Recall that a loop is another of the four basic programming language structures

Conditional Statements Summer 2010 Margaret Reid-Miller

Unit 6. Loop statements

Homework/Program #5 Solutions

Iteration CHAPTER 6. Topic Summary

Statements and Control Flow

(Eng. Hayam Reda Seireg) Sheet Java

Keywords are identifiers having predefined meanings in C programming language. The list of keywords used in standard C are : unsigned void

File class in Java. Scanner reminder. Files 10/19/2012. File Input and Output (Savitch, Chapter 10)

What is a Loop? Pretest Loops in C++ Types of Loop Testing. Count-controlled loops. Loops can be...

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

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

Name: Class: Date: 9. The compiler ignores all comments they are there strictly for the convenience of anyone reading the program.

Building Java Programs

Part I. Multiple Choice Questions (2 points each):

Object Oriented Software Design

12-6 Write a recursive definition of a valid Java identifier (see chapter 2).

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

1.00/ Session 2 Fall Basic Java Data Types, Control Structures. Java Data Types. 8 primitive or built-in data types

C H A P T E R Regular Expressions regular expression

CSE 1223: Introduction to Computer Programming in Java Chapter 2 Java Fundamentals

9 Control Statements. 9.1 Introduction. 9.2 Objectives. 9.3 Statements

Building Java Programs

Using Files as Input/Output in Java 5.0 Applications

Moving from CS 61A Scheme to CS 61B Java

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

qwertyuiopasdfghjklzxcvbnmqwerty uiopasdfghjklzxcvbnmqwertyuiopasd fghjklzxcvbnmqwertyuiopasdfghjklzx cvbnmqwertyuiopasdfghjklzxcvbnmq

Outline. Conditional Statements. Logical Data in C. Logical Expressions. Relational Examples. Relational Operators

While and Do-While Loops Summer 2010 Margaret Reid-Miller

Conditionals (with solutions)

Preet raj Core Java and Databases CS4PR. Time Allotted: 3 Hours. Final Exam: Total Possible Points 75

Example of a Java program

Java Basics: Data Types, Variables, and Loops

Arrays. Introduction. Chapter 7

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

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

Course Intro Instructor Intro Java Intro, Continued

5.2 Q2 The control variable of a counter-controlled loop should be declared as: a.int. b.float. c.double. d.any of the above. ANS: a. int.

Sources: On the Web: Slides will be available on:

Continuous Integration Part 2

Introduction to Java. CS 3: Computer Programming in Java

The if Statement and Practice Problems

LOOPS CHAPTER CHAPTER GOALS

Common Beginner C++ Programming Mistakes

CS1020 Data Structures and Algorithms I Lecture Note #1. Introduction to Java

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

CS 241 Data Organization Coding Standards

Collections.sort(population); // Método de ordenamiento

Lecture Notes on Linear Search

Line-based file processing

MIDTERM 1 REVIEW WRITING CODE POSSIBLE SOLUTION

Software Testing. Definition: Testing is a process of executing a program with data, with the sole intention of finding errors in the program.

Arrays in Java. Working with Arrays

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

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

Building Java Programs

Adding and Subtracting Positive and Negative Numbers

Scanner. It takes input and splits it into a sequence of tokens. A token is a group of characters which form some unit.

Elementary Number Theory and Methods of Proof. CSE 215, Foundations of Computer Science Stony Brook University

Lecture 2 Notes: Flow of Control

Scanner sc = new Scanner(System.in); // scanner for the keyboard. Scanner sc = new Scanner(System.in); // scanner for the keyboard

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

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

Vieta s Formulas and the Identity Theorem

MXwendler Javascript Interface Description Version 2.3

Stacks. Linear data structures

CSC 221: Computer Programming I. Fall 2011

Building Java Programs

6. Control Structures

Boolean Logic in MATLAB

Transcription:

Topic 16 boolean logic "No matter how correct a mathematical theorem may appear to be, one ought never to be satisfied that there was not something imperfect about it until it also gives the impression of being beautiful." - George Boole Copyright Pearson Education, 2010 Based on slides by Marty Stepp and Stuart Reges from http://www.buildingjavaprograms.com/

Type boolean boolean: A logical type whose values are true and false. A logical <test> is actually a boolean expression. Like other types, it is legal to: create a boolean variable pass a boolean value as a parameter return a boolean value from methods call a method that returns a boolean and use it as a test boolean minor = (age < 21); boolean isprof = name.contains("prof"); boolean lovescs = true; // allow only CSE-loving students over 21 if (minor isprof!lovescs) { System.out.println("Can't enter the club!");

Using boolean Why is type boolean useful? Can capture a complex logical test result and use it later Can write a method that does a complex test and returns it Makes code more readable Can pass around the result of a logical test (as param/return) boolean goodtemp = 40 <= temp && temp <= 90; boolean goodhumidity = 20 <= humidity && humidity <= 70; boolean hastime = time >= 90; // minutes if ((goodtemp && goodhumidity) hastime) { System.out.println("Let's RIDE BIKES!!!!"); else { System.out.println("Maybe tomorrow");

Returning boolean public static boolean isprime(int n) { int factors = 0; for (int i = 1; i <= n; i++) { if (n % i == 0) { factors++; // NOTE: GACKY STYLE AHEAD!! GACKY == BAD!! if (factors == 2) { return true; else { return false; Calls to methods returning boolean can be used as tests: if (isprime(57)) {...

Boolean question Improve our "rhyme" / "alliterate" program to use boolean methods to test for rhyming and alliteration. Type two words: Bare blare They rhyme! They alliterate!

Boolean answer if (rhyme(word1, word2)) { System.out.println("They rhyme!"); if (alliterate(word1, word2)) { System.out.println("They alliterate!");... // Returns true if s1 and s2 end with the same two letters. // NOTE: GACKY STYLE AHEAD!! public static boolean rhyme(string s1, String s2) { if (s2.length() >= 2 && s1.endswith(s2.substring(s2.length() - 2))) { return true; else { return false; // Returns true if s1 and s2 start with the same letter. // NOTE: GACKY STYLE AHEAD!! public static boolean alliterate(string s1, String s2) { if (s1.startswith(s2.substring(0, 1))) { return true; else { return false;

"Boolean Zen", part 1 Students new to boolean often test if a result is true: if (isprime(57) == true) { // bad... But this is unnecessary and redundant. Preferred: if (isprime(57)) { // good... A similar pattern can be used for a false test: if (isprime(57) == false) { // bad if (!isprime(57)) { // good

"Boolean Zen", part 2 Programmers often write methods that return boolean often have an if/else that returns true or false: // NOTE: GACKY STYLE AHEAD!! public static boolean bothodd(int n1, int n2) { if (n1 % 2!= 0 && n2 % 2!= 0) { return true; else { return false; But the code above is unnecessarily verbose.

Solution w/ boolean variable We could store the result of the logical test. public static boolean bothodd(int n1, int n2) { boolean test = (n1 % 2!= 0 && n2 % 2!= 0); // NOTE: BAD STYLE AHEAD!! if (test) { // test == true return true; else { // test == false return false; Notice: Whatever test is, we want to return that. If test is true, we want to return true. If test is false, we want to return false.

Solution w/ "Boolean Zen" Observation: The if/else is unnecessary. The variable test stores a boolean value; its value is exactly what you want to return. So return that! public static boolean bothodd(int n1, int n2) { boolean test = (n1 % 2!= 0 && n2 % 2!= 0); return test; An even shorter version: We don't even need the variable test. We can just perform the test and return its result in one step. public static boolean bothodd(int n1, int n2) { return (n1 % 2!= 0 && n2 % 2!= 0);

Replace "Boolean Zen" template public static boolean <name>(<parameters>) { if (<test>) { return true; else { return false; with public static boolean <name>(<parameters>) { return <test>;

Improved isprime method The following version utilizes Boolean Zen: public static boolean isprime(int n) { int factors = 0; for (int i = 1; i <= n; i++) { if (n % i == 0) { factors++; return factors == 2; // if n has 2 factors -> true Modify the Rhyme program to use Boolean Zen.

Boolean Zen answer public static void main(string[] args) { Scanner console = new Scanner(System.in); System.out.print("Type two words: "); String word1 = console.next().tolowercase(); String word2 = console.next().tolowercase(); if (rhyme(word1, word2)) { System.out.println("They rhyme!"); if (alliterate(word1, word2)) { System.out.println("They alliterate!"); // Returns true if s1 and s2 end with the same two letters. public static boolean rhyme(string s1, String s2) { return s2.length() >= 2 && s1.endswith(s2.substring(s2.length() - 2)); // Returns true if s1 and s2 start with the same letter. public static boolean alliterate(string s1, String s2) { return s1.startswith(s2.substring(0, 1));

De Morgan's Law De Morgan's Law: Rules used to negate boolean tests.!(a && b) ==!a!b!(a b) ==!a &&!b Useful when you want the opposite of an existing test. Original Expression Negated Expression Alternative a && b!a!b!(a && b) a b!a &&!b!(a b) Example: Original Code if (x == 7 && y > 3) {... Negated Code if (x!= 7 y <= 3) {...

Clicker Question Which of the following is equivalent to the boolean expression?!((x >= y) (z!= x)) A.!(x >= y) &&!(z!= x) B.!(x >= y)!(z!= x) C. (x == y) && (z >= x) D. (x < y) && (z == x) E. More than one of A - D is correct

Boolean practice questions Write a method named isvowel that returns whether a String is a vowel (a, e, i, o, or u), case-insensitively. isvowel("q") returns false isvowel("a") returns true isvowel("e") returns true Write a method isnonvowel that returns whether a String is any character except a vowel. isnonvowel("q") returns true isnonvowel("a") returns false isnonvowel("e") returns false

Boolean practice answers // Enlightened version. I have seen the true way (and false way) public static boolean isvowel(string s) { return s.equalsignorecase("a") s.equalsignorecase("e") s.equalsignorecase("i") s.equalsignorecase("o") s.equalsignorecase("u"); // Enlightened "Boolean Zen" version public static boolean isnonvowel(string s) { return!s.equalsignorecase("a") &&!s.equalsignorecase("e") &&!s.equalsignorecase("i") &&!s.equalsignorecase("o") &&!s.equalsignorecase("u"); // or, return!isvowel(s);

When to return? Methods with loops and return values can be tricky. When and where should the method return its result? Write a method seven that accepts a Random parameter and uses it to draw up to ten lotto numbers from 1-30. If any of the numbers is a lucky 7, the method should stop and return true. If none of the ten are 7 it should return false. The method should print each number as it is drawn. 15 29 18 29 11 3 30 17 19 22 (first call) 29 5 29 4 7 (second call)

Flawed solution // Draws 10 lotto numbers; returns true if one is 7. public static boolean seven(random rand) { for (int i = 1; i <= 10; i++) { int num = rand.nextint(30) + 1; System.out.print(num + " "); if (num == 7) { return true; else { return false; The method always returns immediately after the first roll. This is wrong if that draw isn't a 7; we need to keep drawing.

Returning at the right time // Draws 10 lotto numbers; returns true if one is 7. public static boolean seven(random rand) { for (int i = 1; i <= 10; i++) { int num = rand.nextint(30) + 1; System.out.print(num + " "); if (num == 7) { return true; // found lucky 7; can exit now return false; // if we get here, there was no 7 Returns true immediately if 7 is found. If 7 isn't found, the loop continues drawing lotto numbers. If all ten aren't 7, the loop ends and we return false.

Boolean return questions hasanodddigit : returns true if any digit of an integer is odd. hasanodddigit(4822116) returns true hasanodddigit(2448) returns false alldigitsodd : returns true if every digit of an integer is odd. alldigitsodd(135319) returns true alldigitsodd(9174529) returns false isallvowels : returns true if every char in a String is a vowel. isallvowels("eieio") returns true isallvowels("oink") returns false These problems are available in our Practice-It! system under 5.x.

Boolean return answers public static boolean hasanodddigit(int n) { while (n!= 0) { if (n % 2!= 0) { // check whether last digit is odd return true; n = n / 10; return false; public static boolean alldigitsodd(int n) { while (n!= 0) { if (n % 2 == 0) { return false; n = n / 10; return true; // check whether last digit is even public static boolean isallvowels(string s) { for (int i = 0; i < s.length(); i++) { String letter = s.substring(i, i + 1); if (!isvowel(letter)) { return false; return true;

while loop question Write a method digitsum that accepts an integer parameter and returns the sum of its digits. Assume that the number is non-negative. Example: digitsum(29107) returns 2+9+1+0+7 or 19 Hint: Use the % operator to extract a digit from a number.

while loop answer public static int digitsum(int n) { n = Math.abs(n); // handle negatives int sum = 0; while (n > 0) { // add last digit sum = sum + (n % 10); // remove last digit n = n / 10; return sum;