Download presentation
Presentation is loading. Please wait.
1
Chapter 2 Programming Basics
2
Basic Data Concepts Primitive Data Types Expressions Literals
Arithmetic Operators Precedence Mixing Types and Casting
3
Data types type: A category or set of data values.
Constrains the operations that can be performed on data Many languages ask the programmer to specify types Examples: integer, real number, string Internally, computers store everything as 1s and 0s 104 "hi" ask them, how might the computer store "hi" using binary digits? (some kind of mapping; ASCII)
4
Java's primitive types primitive types: 8 simple types for numbers, text, etc. Java also has object types, which we'll talk about later Name Description Examples int integers (up to ) 42, -3, 0, double real numbers (up to 10308) 3.1, , 9.4e3 char single text characters 'a', 'X', '?','\n' boolean logical values true, false The others: byte, float, long, and short Why does Java distinguish integers vs. real numbers? We're basically going to manipulate letters and numbers. We make the integer / real number distinction in English as well. We don't ask, "How many do you weigh?" or, "How much sisters do you have?" Part of the int/double split is related to how a computer processor crunches numbers. A CPU does integer computations and a Floating Point Unit (FPU) does real number computations. Why does Java separate int and double? Why not use one combined type called number? 4
5
Expressions expression: A value or operation that computes a value.
Examples: * 5 (7 + 2) * 6 / 3 42 The simplest expression is a literal value. -242 “Hello World” 3.4 A complex expression can use operators and parentheses.
6
Arithmetic operators operator: Combines multiple values or expressions. + addition - subtraction (or negation) * multiplication / division % modulus (a.k.a. remainder) As a program runs, its expressions are evaluated. 1 + 1 evaluates to 2 System.out.println(3 * 4); prints 12 How would we print the text 3 * 4 ?
7
Integer division with /
When we divide integers, the quotient is also an integer. 14 / 4 is 3, not 3.5 4 ) ) ) 1425 54 21 More examples: 32 / 5 is 6 84 / 10 is 8 156 / 100 is 1 Dividing by 0 causes an error when your program runs.
8
Integer remainder with %
The % operator computes the remainder from integer division. 14 % 4 is 2 218 % 5 is ) ) Applications of % operator: Obtain last digit of a number: % 10 is 7 Obtain last 4 digits: % is 6489 See whether a number is odd: 7 % 2 is 1, 42 % 2 is 0 What is the result? 45 % 6 2 % 2 8 % 20 11 % 0 What is 8 % 20? It's 8, but students often say 0. 8
9
Precedence precedence: Order in which operators are evaluated.
Generally operators evaluate left-to-right is (1 - 2) - 3 which is -4 But * / % have a higher level of precedence than * 4 is 13 6 + 8 / 2 * 3 * 3 is 18 Parentheses can force a certain order of evaluation: (1 + 3) * 4 is 16 Spacing does not affect order of evaluation 1+3 * 4-2 is 11
10
Precedence examples 1 * 2 + 3 * 5 % 4 \_/ | 2 + 3 * 5 % 4
\_/ | * 5 % 4 \_/ | % 4 \___/ | \________/ | 1 + 8 % 3 * 2 - 9 \_/ | * 2 - 9 \___/ | \______/ | \_________/ | Ask the students what 15 / 4 and 2 / 3 are, since the answers are non-obvious.
11
Precedence questions – Partner up
What values result from the following expressions? 9 / 5 695 % 20 7 + 6 * 5 7 * 6 + 5 248 % 100 / 5 6 * / 4 (5 - 7) * 4 6 + (18 % ( )) 8 % 20 2 / 3 * 834 (I don't usually go through these in lecture; I tell them they are extra problems they can work on later) Answers: 1 15 37 47 9 16 -8 11
12
Real numbers (type double)
Examples: , , e17 Placing .0 or . after an integer makes it a double. The operators + - * / % () all still work with double. / produces an exact answer: / 2.0 is 7.5 Precedence is the same: () before * / % before + - Point out that it's odd for 42.0 to be considered a real number, but it is. 12
13
Real number example 2.0 * 2.4 + 2.25 * 4.0 / 2.0
\___/ | * 4.0 / 2.0 \___/ | / 2.0 \_____/ | \____________/ |
14
Mixing types When int and double are mixed, the result is a double.
The conversion is per-operator, affecting only its operands. 7 / 3 * / 2 \_/ | * / 2 \___/ | / 2 \_/ | \________/ | 3 / 2 is 1 above, not 1.5. / 3 * / 4 \___/ | * / 4 \_____/ | / 4 \_/ | \_________/ | \______________/ | I don't usually go through the expression on the right; I just show it very quickly and move on.
15
Casting “Casting a value in a different type” (int) 32.4
Results in 32 Casting an expression Use parentheses to cast the expression evaluation and not just one of the operands. (int) (2.5 / .15) Results in 16 (int) 2.5 / .15 Results in 13.3
16
Review Data Concepts What are Primitive Data Types?
8 simple types for numbers, text, etc. What is an Expression? expression: A value or operation that computes a value. What is an Literal? The simplest expression is a literal value, which doesn’t involve operators. Arithmetic Operators Combines multiple values or expressions. (+ - / * %) Precedence Order in which operators are evaluated. Mixing Types and Casting When int and double are mixed, the result is a double.
17
Variables Assignment/Declaration Variations String Concatenation
Variables and Mixing Types 17
18
Receipt example What's bad about the following code?
// Calculate total owed, assuming 9.5% tax / 15% tip public class Receipt { public static void main(String[] args) { System.out.println("Subtotal:"); System.out.println( ); System.out.println("Tax:"); System.out.println(( ) * .08); System.out.println("Tip:"); System.out.println(( ) * .15); System.out.println("Total:"); System.out.println( ( ) * ( ) * .15); } The subtotal expression ( ) is repeated So many println statements
19
Variables variable: A piece of the computer's memory that is given a name and type, and can store a value. Like preset stations on a car stereo, or smart phone speed dial: Steps for using a variable: Declare it - state its name and type Initialize it - store a value into it Use it - print it or use it as part of an expression a variable is also like the MS / MR buttons on a calculator variables must be declared before they are used, just like methods 19
20
Declaration variable declaration: Sets aside memory for storing a value. Variables must be declared before they can be used. Syntax: type name; The name is an identifier. int x; double myGPA; x myGPA
21
Assignment assignment: Stores a value into a variable. Syntax:
The value can be an expression; the variable stores its result. Syntax: name = expression; int x; x = 3; double myGPA; myGPA = ( )/ 2; x myGPA 3.5
22
Using variables Once given a value, a variable can be used in expressions: int x; x = 3; System.out.println("x is " + x); // x is 3 System.out.println(5 * x - 1); // 5 * 3 - 1 You can assign a value more than once: int x; x = 3; System.out.println(x + " here"); // 3 here x = 4 + 7; System.out.println("now x is " + x); // now x is 11 x 11 x 3
23
Declaration/initialization
A variable can be declared/initialized in one statement. Syntax: type name = value; double myGPA = 3.95; int x = (11 % 3) + 12; myGPA 3.95 x 14
24
Assignment and algebra
Assignment uses = , but it is not an algebraic equation. = means, "store the value at right in variable at left" The right side expression is evaluated first, and then its result is stored in the variable at left. What happens here? int x = 3; x = x + 2; // ??? x = x + 2; increases the value stored in variable x by two. x 3 x 5 24
25
Assignment and types A variable can only store a value of its own type. int x = 2.5; // ERROR: incompatible types An int value can be stored in a double variable. The value is converted into the equivalent real number. double myGPA = 4; double avg = 11 / 2; Why does avg store 5.0 and not 5.5 ? myGPA 4.0 avg 5.0
26
A Quick Advance Console Input
Input, despite being necessary for most useful programs, is pretty complicated Java has numerous methods for getting input from a bunch of different sources keyboard, local files, web pages, network resources, etc. For now, we will focus on one simple method for reading input from the keyboard Don’t worry about the details of how this works for now
27
A Quick Advance Console Input
Keyboard Input //use existing java library import java.util.Scanner; //insert class name and main //initialize string for keyboard input String inputString = null; System.out.print("Input Command: "); Scanner console = new Scanner(System.in); // Get input from the keyboard. inputString = console.nextLine(); // Echo the input. System.out.print(inputString);
28
Simon Exercise Exercise: Write a program to ask the user their name and favorite number, and then greet them. Hello, what’s your name? Dave What is your favorite number? 7 Nice to meet you, Dave! Your favorite number is 7. //use existing java library import java.util.Scanner; public class Simon { public static void main(String[] args) { //insert class name and main //initialize string for keyboard input String inputString = null; System.out.print("Input Command: "); Scanner console = new Scanner(System.in); // Get input from the keyboard. inputString = console.nextLine(); // Echo the input. System.out.print(“The Command you typed was” + inputString); console.close(); }
29
Mixing types When int and double are mixed, the result is a double.
The conversion is per-operator, affecting only its operands. 7 / 3 * / 2 \_/ | * / 2 \___/ | / 2 \_/ | \________/ | 3 / 2 is 1 above, not 1.5. / 3 * 2.5 – 6. / 4 \___/ | * 2.5 – 6. / 4 \_____/ | / 4 \_/ | \_________/ | \______________/ | I don't usually go through the expression on the right; I just show it very quickly and move on.
30
Compiler errors A variable can't be used until it is assigned a value.
int x; System.out.println(x); // ERROR: x has no value You may not declare the same variable twice. int x; int x; // ERROR: x already exists int x = 3; int x = 5; // ERROR: x already exists How can this code be fixed?
31
String concatenation string concatenation: Using + between a string and another value to make a longer string. "hello" + 42 is "hello42" 1 + "abc" + 2 is "1abc2" "abc" is "abc12" "abc" is "3abc" "abc" + 9 * 3 is "abc27" "1" + 1 is "11" "abc" is "3abc" Use + to print a string and an expression's value together. System.out.println("Grade: " ( ) / 2); Output: Grade: 83.5
32
Printing a variable's value
Use + to print a string and a variable's value on one line. double grade = ( ) / 3.0; System.out.println("Your grade was " + grade); int students = ; System.out.println("There are " + students + " students in the course."); Output: Your grade was 83.2 There are 65 students in the course.
33
Review What is the result of this expression: "abc" + 1 + 2
How do you print to the console the value of a variable? double grade = ( ) / 3.0; System.out.println("Your grade was " + grade);
34
Receipt question Improve the receipt program using variables.
public class Receipt { public static void main(String[] args) { // Calculate total owed, assuming 9.5% tax / 15% tip System.out.println("Subtotal:"); System.out.println( ); System.out.println("Tax:"); System.out.println(( ) * .08); System.out.println("Tip:"); System.out.println(( ) * .15); System.out.println("Total:"); System.out.println( ( ) * .15 + ( ) * .095); }
35
Receipt answer public class Receipt { public static void main(String[] args) { // Calculate total owed, assuming 9.5% tax // 15% tip double subtotal = ; double tax = subtotal * .095; double tip = subtotal * .15; double total = subtotal + tax + tip; System.out.println("Subtotal: " + subtotal); System.out.println("Tax: " + tax); System.out.println("Tip: " + tip); System.out.println("Total: " + total); }
36
Shopping Cart Exercise
Modify your Greetings program to now be a Shopping Cart Ask their name and for the price of 3 items. Output the following: Subtotal Tax (9.5%) Tip (15%) Final Bill
37
Conditionals - if/else statements
Relational operators Nested if/else statements Object equality Factoring if/else statements Testing multiple conditions
38
Executes a block of statements only if a test is true
The if statement Executes a block of statements only if a test is true if (test) { statement; ... } Example: double gpa = console.nextDouble(); if (gpa >= 2.0) { System.out.println("Application accepted.");
39
Executes one block if a test is true, another if false
The if/else statement Executes one block if a test is true, another if false if (test) { statement(s); } else { } Example: double gpa = console.nextDouble(); if (gpa >= 2.0) { System.out.println("Welcome to Mars University!"); System.out.println("Application denied.");
40
Relational expressions
if statements and for loops both use logical tests. if (i <= 10) { ... for (int i = 1; i <= 10; i++) { ... These are boolean expressions, seen in Ch. 5. Tests use relational operators: Operator Meaning Example Value == equals 1 + 1 == 2 true != does not equal 3.2 != 2.5 < less than 10 < 5 false > greater than 10 > 5 <= less than or equal to 126 <= 100 >= greater than or equal to 5.0 >= 5.0 Note that == tests equality, not = . The = is used for the assignment operator!
41
Sample if/else – Using Relational Operators
public class MLBPlayoffs { public static void main(String[] args){ int mariners = 4; int angels = 1; int athletics = 4; int rangers = 0; if (mariners > angels) { if (rangers > athletics) { System.out.println("Mariners play game 163!"); } else{ System.out.println("Mariners won, but didn't make it to game 163"); else { System.out.println("Mariners lost.");
42
Misuse of if What's wrong with the following code?
Scanner console = new Scanner(System.in); System.out.print("What percentage did you earn? "); int percent = console.nextInt(); if (percent >= 90) { System.out.println("You got an A!"); } if (percent >= 80) { System.out.println("You got a B!"); if (percent >= 70) { System.out.println("You got a C!"); if (percent >= 60) { System.out.println("You got a D!"); if (percent < 60) { System.out.println("You got an F!"); ...
43
Chooses between outcomes using many tests
Nested if/else Chooses between outcomes using many tests if (test) { statement(s); } else if (test) { } else { } Example: if (x > 0) { //test1 System.out.println("Positive");//statement1 } else if (x < 0) {//test2 System.out.println("Negative");//statement2 System.out.println("Zero");//statement3
44
Nested if/else/if Example:
If it ends with else, exactly one path must be taken. If it ends with if, the code might not execute any path. if (test) { statement(s); } else if (test) { } Example: if (place == 1) { System.out.println("Gold medal!"); } else if (place == 2) { System.out.println("Silver medal!"); } else if (place == 3) { System.out.println("Bronze medal.");
45
Nested if structures exactly 1 path (mutually exclusive)
if (test) { statement(s); } else if (test) { } else { } 0 or 1 path (mutually exclusive) 0, 1, or many paths (independent tests; not exclusive)
46
Which nested if/else? (1) if/if/if (2) nested if/else (3) nested if/else if Whether a student is in elementary, middle, high school, or college. (2) nested if / else if / else Whether you made the dean's list (GPA ≥ 3.8) or honor roll ( ). (3) nested if / else if Whether a number is divisible by 2, 3, and/or 5. (1) sequential if / if / if Computing a grade of A, B, C, D, or F based on a percentage. (2) nested if / else if / else if / else if / else
47
Exercise Formula for body mass index (BMI):
Weight class below 18.5 underweight normal overweight 30.0 and up obese Formula for body mass index (BMI): Write a program that produces output like the following: This program reads data for two people and computes their body mass index (BMI). Enter next person's information: height (in inches)? 70.0 weight (in pounds)? height (in inches)? 62.5 weight (in pounds)? 130.5 Person 1 BMI = overweight Person 2 BMI = normal Difference = // This program computes two people's body mass index (BMI) and // compares them. The code uses parameters, returns, and Scanner. import java.util.*; // so that I can use Scanner public class BMI { public static void main(String[] args) { System.out.println("This program reads in data for two people and"); System.out.println("computes their body mass index (BMI)"); System.out.println(); // finish me! }
48
Nested if/else answer // This program computes a person's body mass index (BMI). import java.util.*; public class BMI { public static void main(String[] args) { double height; double weight; double bodyMass; // prints a welcome message explaining the program System.out.println("This program reads data for a person and"); System.out.println("computes their body mass index (BMI)."); System.out.println(); // Ask the user for their height and weight. Scanner console = new Scanner(System.in); System.out.println("Enter the person's information:"); System.out.print("height (in inches)? "); height = console.nextDouble(); System.out.print("weight (in pounds)? "); weight = console.nextDouble(); ...
49
Nested if/else, cont'd. // Compute the user's BMI.
bodyMass = weight * 703 / (height * height); System.out.println("BMI = " + bodyMass); // Determine the user's weight status. if (bodyMass < 18.5) { System.out.println("underweight"); } else if (bodyMass < 25) { System.out.println("normal"); } else if (bodyMass < 30) { System.out.println("overweight"); } else { System.out.println("obese"); } How would we round the BMI numbers?
50
Review What is a conditional statement in Java?
If/else Example: If (test){ } What is a Nested If statement? if (test){ System.out.println(“Inside first test”); else if (test2){ or If (test){ If (test2 ){ System.out.println(“Inside second test”); What kind of operator is ==? Relational What is it used for? Test equality of the two operands
51
Equality operator for objects
The == operator does not work for objects, such as Strings // Not Valid String name = "Test"; if (name == "Dave"){} Instead use the equals or equalsIgnoreCase methods // Valid if (name.equals("Dave")){} // Also valid. As name implies case is ignored. if (name.equalsIgnoreCase("Dave")){}
52
Logical operators Tests can be combined using logical operators:
"Truth tables" for each, used with logical values p and q: Operator Description Example Result && and (2 == 3) && (-1 < 5) false || or (2 == 3) || (-1 < 5) true ! not !(2 == 3) p q p && q p || q true false p !p true false
53
Evaluating logic expressions
Relational operators have lower precedence than math. 5 * 7 >= * (7 - 1) 5 * 7 >= * 6 35 >= 35 >= 33 true Relational operators cannot be "chained" as in algebra. 2 <= x <= 10 true <= (assume that x is 15) error! Instead, combine multiple tests with && or || 2 <= x && x <= 10 true && false false
54
Logical questions What is the result of each of the following expressions? int x = 42; int y = 17; int z = 25; y < x && y <= z x % 2 == y % 2 || x % 2 == z % 2 x <= y + z && x >= y + z !(x < y && x < z) (x + y) % 2 == 0 || !((z - y) % 2 == 0) Answers: true, false, true, true, false
55
Sample if/else – Using Logical Operators
public class MLBPlayoffs { public static void main(String[] args){ int mariners = 4; int angels = 1; int athletics = 4; int rangers = 0; if ((mariners > angels) && (rangers > athletics)){ System.out.println("Mariners play game 163!"); } else if (mariners > angels){ System.out.println("Mariners won, but didn't make it to game 163."); else { System.out.println("Mariners lost.");
56
Shopping Cart Exercise Cont’d
Modify your Shopping Cart program to now be a Restaurant Shopping Cart that handles different tax and tip based upon the locale. Ask their name, locale, and the price of 3 items. Output the following: Subtotal Tax (taxRate) Tip (tipRate) Final Bill Locale Tax Tip Issaquah 9.5% 15% Portland 0% Los Angeles 9.0% Paris 19.6% Taipei 5.0%
57
The for loop Tracing for loops For loop patterns Nested for loops 58
58
Repetition with for loops
So far, repeating a statement is redundant: System.out.println("Homer says:"); System.out.println("I am so smart"); System.out.println("S-M-R-T... I mean S-M-A-R-T"); Java's for loop statement performs a task many times. for (int i = 1; i <= 4; i++) { // repeat 4 times } also related to book exercise 1.10 about printing 1000 copies of "All work and no play makes Jack a dull boy"
59
for loop syntax header for (initialization; test; update) { statement;
body header for (initialization; test; update) { statement; ... } Perform initialization once. Repeat the following: Check if the test is true. If not, stop. Execute the statements. Perform the update.
60
Initialization Tells Java what variable to use in the loop
for (int i = 1; i <= 6; i++) { System.out.println("I am so smart"); } Tells Java what variable to use in the loop Performed once as the loop begins The variable is called a loop counter can use any name, not just i can start at any value, not just 1
61
Test Tests the loop counter variable against a limit
for (int i = 1; i <= 6; i++) { System.out.println("I am so smart"); } Tests the loop counter variable against a limit Uses relational operators: < less than <= less than or equal to > greater than >= greater than or equal to
62
Increment and decrement
shortcuts to increase or decrease a variable's value by 1 Shorthand Equivalent longer version variable++; variable = variable + 1; variable--; variable = variable - 1; int x = 2; x++; // x = x + 1; // x now stores 3 double gpa = 2.5; gpa--; // gpa = gpa - 1; // gpa now stores 1.5
63
Loop walkthrough Output: 1 squared = 1 2 squared = 4 3 squared = 9
for (int i = 1; i <= 4; i++) { System.out.println(i + " squared = " + (i * i)); } System.out.println("Whoo!"); Output: 1 squared = 1 2 squared = 4 3 squared = 9 4 squared = 16 Whoo! 3 5 1 2 3 4 5
64
shortcuts to modify a variable's value
Modify-and-assign shortcuts to modify a variable's value Shorthand Equivalent longer version variable += value; variable = variable + value; variable -= value; variable = variable - value; variable *= value; variable = variable * value; variable /= value; variable = variable / value; variable %= value; variable = variable % value; x += 3; // x = x + 3; gpa -= 0.5; // gpa = gpa - 0.5; number *= 2; // number = number * 2;
65
Repetition over a range
System.out.println("1 squared = " + 1 * 1); System.out.println("2 squared = " + 2 * 2); System.out.println("3 squared = " + 3 * 3); System.out.println("4 squared = " + 4 * 4); System.out.println("5 squared = " + 5 * 5); System.out.println("6 squared = " + 6 * 6); Intuition: "I want to print a line for each number from 1 to 6" The for loop does exactly that! for (int i = 1; i <= 6; i++) { System.out.println(i + " squared = " + (i * i)); } "For each integer i from 1 through 6, print ..."
66
Multi-line loop body System.out.println("+----+");
for (int i = 1; i <= 3; i++) { System.out.println("\\ /"); System.out.println("/ \\"); } Output: +----+ \ / / \
67
Review What does this operator do: ++
Increment a variable How do you repeat a set of statements a fixed number of times in Java? Use the for loop
68
Even numbers Exercise Print out the even numbers from 1 – 200
Use for and if statements Remember the % operator If you finish early Write a program that asks a user for number and then returns the sum of the cubes from 1 to the number …. + N3
69
Counting down The update can use -- to make the loop count down.
The test must say > instead of < System.out.print("T-minus "); for (int i = 10; i >= 1; i--) { System.out.print(i + ", "); } System.out.println("blastoff!"); System.out.println("The end."); Output: T-minus 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, blastoff! The end.
70
Nested for loops
71
Nested loops nested loop: A loop placed inside another loop. Output:
for (int i = 1; i <= 5; i++) { for (int j = 1; j <= 10; j++) { System.out.print("*"); } System.out.println(); // to end the line Output: ********** The outer loop repeats 5 times; the inner one 10 times. "sets and reps" exercise analogy How would we print a multiplication table? try printing each of the following inside the inner loop: System.out.print(i + " "); System.out.print(j + " "); System.out.print((i * j) + " ");
72
Expressions for loop counter
int highTemp = 11; for (int i = 0; i <= highTemp / 2; i++) { // outputs temperatures in fahrenheit System.out.println(i * ); } Output: 32.0 33.8 35.6 37.4 39.2 41.0
73
Nested for loop exercise
// Outer loop. for (int i = 1; i <= 5; i++) { // Inner loop. for (int j = 1; j <= i; j++) { System.out.print("*"); } System.out.println(); Output: * ** *** **** *****
74
Nested for loop exercise
What is the output of the following nested for loops? // outer loop for (int i = 1; i <= 5; i++) { //inner loop for (int j = 1; j <= i; j++) { System.out.print(i); } System.out.println(); Output: 1 22 333 4444 55555
75
Common errors Both of the following sets of code produce infinite loops: for (int i = 1; i <= 5; i++) { for (int j = 1; i <= 10; j++) { System.out.print("*"); } System.out.println(); for (int j = 1; j <= 10; i++) { Both cases produce infinite loops. 76
76
Complex lines What nested for loops produce the following output?
....1 ...2 ..3 .4 5 We must build multiple complex lines of output using: an outer "vertical" loop for each of the lines inner "horizontal" loop(s) for the patterns within each line outer loop (loops 5 times because there are 5 lines) inner loop (repeated characters on each line)
77
Outer and inner loop First write the outer loop, from 1 to the number of lines. for (int line = 1; line <= 5; line++) { ... } Now look at the line contents. Each line has a pattern: some dots (0 dots on the last line), then a number ....1 ...2 ..3 .4 5 Observation: the number of dots is related to the line number. 5 – line
78
Mapping loops to numbers
for (int count = 1; count <= 5; count++) { System.out.print( ... ); } What statement in the body would cause the loop to print: System.out.print(3 * count " ");
79
Loop tables What statement in the body would cause the loop to print:
To see patterns, make a table of count and the numbers. Each time count goes up by 1, the number should go up by 5. But count * 5 is too great by 3, so we subtract 3. count number to print 1 2 7 3 12 4 17 5 22 5 * count 5 10 15 20 25 5 * count - 3 2 7 12 17 22
80
Loop tables question What statement in the body would cause the loop to print: Let's create the loop table together. Each time count goes up 1, the number printed should ... But this multiple is off by a margin of ... count number to print 1 17 2 13 3 9 4 5 -4 * count -4 -8 -12 -16 -20 -4 * count -4 * count + 21 -4 17 -8 13 -12 9 -16 5 -20 1
81
Nested for loop exercise – Partner up
Make a table to represent any patterns on each line. ....1 ...2 ..3 .4 5 To print a character multiple times, use a for loop. for (int j = 1; j <= 4; j++) { System.out.print("."); // 4 dots } line # of dots 1 4 2 3 5 -1 * line -1 -2 -3 -4 -5 -1 * line + 5 4 3 2 1
82
Nested for loop solution
Answer: for (int line = 1; line <= 5; line++) { for (int j = 1; j <= (-1 * line + 5); j++){ System.out.print("."); } System.out.println(line); Output: ....1 ...2 ..3 .4 5
83
Nested for loop exercise
What is the output of the following nested for loops? for (int line = 1; line <= 5; line++) { for (int j = 1; j <= (-1 * line + 5); j++) { System.out.print("."); } for (int k = 1; k <= line; k++) { System.out.print(line); System.out.println(); Answer: ....1 ...22 ..333 .4444 55555
84
Exercises Modify your EvenNumbers program to output the even numbers from to output a table with 10 numbers per line using nested for loops. …. Rotating Single Digits Output a rotating, increasing list of single-digit numbers. Each line is 50 characters wide | | | | | Dots and numbers Output the following: ....1 ...2. ..3.. .4... 5....
85
Nested for loop exercise
Modify the previous code to produce this output: ....1 ...2. ..3.. .4... 5.... Answer: for (int line = 1; line <= 5; line++) { for (int j = 1; j <= (-1 * line + 5); j++) { System.out.print("."); } System.out.print(line); for (int j = 1; j <= (line - 1); j++) { System.out.println(); If you have time left over at this point (you probably won't), you could ask them how to make the loop print 12 lines instead of 5. (leads in to constants in next lecture)
86
Developing algorithms
87
Where are we going? Write a program that uses nested for loops to create the following hourglass. |””””””””””| Quotes=10 \::::::::/ \::::::/ \::::/ \::/ || /::\ /::::\ /::::::\ /::::::::\ |””””””””””| Top Half Row Spaces Colons 1 8 2 6 3 4
88
Development strategy Task: Use nested for loops to produce the following output. Recommendations for managing complexity: Design the algorithm using Pseudo-code. write an English description of steps required use this description to decide the methods If needed, create a table of patterns of characters Use table to write your for loops Write your code/methods. #================# | <><> | | <>....<> | | <> <> | |<> <>|
89
Aside: Why draw ASCII art?
ASCII art has complex patterns Can focus on the algorithms #================# | <><> | | <>....<> | | <> <> | |<> <>|
90
1. Pseudo-code pseudo-code: An English description of an algorithm.
Example: Drawing a 12 wide by 7 tall box of stars print 12 stars. for (each of 5 lines) { print a star. print 10 spaces. } ************ * *
91
Pseudo-code algorithm
Take 1 minute to discuss with your partner the patterns you see in the graphic below 1. Line # , 16 =, # 2. Top half | spaces (decreasing) <> dots (increasing) spaces (same as above) 3. Bottom half (top half upside-down) 4. Line #================# | <><> | | <>....<> | | <> <> | |<> <>|
92
Pseudo-code public class Mirror {
public static void main(String[] args) { //line line(); // top half topHalf(); // bottom half bottomHalf(); // line }
93
Pseudo-code with methods
public class Mirror { public static void main(String[] args) { //line line(); // top half topHalf(); // bottom half bottomHalf(); // line } public static void line(){ // # , 16 =, # public static void topHalf(){ // | // spaces (decreasing) // <> // dots (increasing) // spaces (same as above) public static void bottomHalf(){ // (top half upside-down)
94
Pseudo-code with for loops
public class Mirror { public static void main(String[] args) { //line line(); // top half topHalf(); // bottom half bottomHalf(); // line } public static void line(){ // # , 16 =, # public static void topHalf(){ for (int line = 1; line <= 4; line++){ // | // spaces (decreasing) // <> // dots (increasing) // spaces (same as above) public static void bottomHalf(){ // (top half upside-down)
95
2. Tables A table for the top half:
Compute spaces and dots expressions from line number Why do we want to create an expression in terms of the line number? line spaces line * dots 4 * line - 4 1 6 2 4 3 8 12 line spaces dots 1 6 2 4 3 8 12 #================# | <><> | | <>....<> | | <> <> | |<> <>|
96
2. Tables cont’d A table for the bottom half:
Compute spaces and dots expressions from line number line spaces line * 2 - 2 dots line * 1 6 12 2 4 8 3 line spaces dots 1 12 2 8 3 4 6 #================# | <><> | | <>....<> | | <> <> | |<> <>|
97
3. Writing the code Useful questions about the top half:
What methods? (think structure and redundancy) Number of (nested) loops per line? #================# | <><> | | <>....<> | | <> <> | |<> <>|
98
Partial solution // Prints the expanding pattern of <> // for the top half of the figure. public static void topHalf(){ for (int line = 1; line <= 4; line++){ // | System.out.print("|"); // spaces (decreasing) for (int spaces = 1; spaces <= line * ; spaces++){ System.out.print(" "); } // <> System.out.print("<>"); // dots (increasing) for (int dots = 1; dots <= 4 * line - 4;dots++){ System.out.print("."); // spaces (same as above) System.out.println("|");
99
Development strategy Review
What is the 1st step that I want you to do in developing your algorithm? Design the algorithm using Pseudo-code. If needed, create a table of patterns of characters Use table to write your for loops Write your code/methods.
100
Hourglass Exercise Write a program that uses nested for loops to create the following hourglass. |””””””””””| Quotes=10 \::::::::/ \::::::/ \::::/ \::/ || /::\ /::::\ /::::::\ /::::::::\ |””””””””””| Top Half Row Spaces Colons 1 8 2 6 3 4
101
Hourglass Exercise Write a program that uses nested for loops to create the following hourglass. |””””””””””| Quotes=10 \::::::::/ \::::::/ \::::/ \::/ || /::\ /::::\ /::::::\ /::::::::\ |””””””””””| Top Half Row Spaces Colons 1 8 2 6 3 4
102
Class constants and scope
103
103
Scaling the mirror Let's modify our Mirror program so that it can scale. The current mirror (left) is at size 4; the right is at size 3. The number of rows in the top or bottom We'd like to structure the code so we can scale the figure by changing the code in just one place. #================# | <><> | | <>....<> | | <> <> | |<> <>| #============# | <><> | | <>....<> | |<> <>|
104
Limitations of variables
Idea: Make a variable to represent the size. Use the variable's value in the methods. Problem: A variable in one method can't be seen in others. public static void main(String[] args) { int size = 4; topHalf(); printBottom(); } public static void topHalf() { for (int i = 1; i <= size; i++) { // ERROR: size not found ... public static void bottomHalf() { for (int i = size; i >= 1; i--) { // ERROR: size not found 105
105
Scope scope: The part of a program where a variable exists. From its declaration to the end of the { } braces A variable declared in a for loop exists only in that loop. A variable declared in a method exists only in that method. public static void example() { int x = 3; for (int i = 1; i <= 10; i++) { System.out.println(x); } // i no longer exists here } // x ceases to exist here x's scope i's scope
106
Scope implications Variables without overlapping scope can have same name. for (int i = 1; i <= 100; i++) { System.out.print("/"); } for (int i = 1; i <= 100; i++) { // OK System.out.print("\\"); int i = 5; // OK: outside of loop's scope A variable can't be declared twice or used out of its scope. for (int i = 1; i <= 100 * line; i++) { int i = 2; // ERROR: overlapping scope i = 4; // ERROR: outside scope
107
Class constants class constant: A fixed value visible to the whole program. value can be set only at declaration; cannot be reassigned Syntax: public static final type name = value; name is usually in ALL_UPPER_CASE Examples: public static final int DAYS_IN_WEEK = 7; public static final double INTEREST_RATE = 3.5; public static final int SSN = ;
108
Constants and figures Consider the task of drawing the following scalable figure: +/\/\/\/\/\/\/\/\/\/\+ | | | | Multiples of 5 occur many times | | For every vertical Pipe (|) | | there are 2 /\ +/\/\/\/\+ | | | | The same figure at size 2 109
109
Repetitive figure code
public class Sign { public static void main(String[] args) { drawLine(); drawBody(); } public static void drawLine() { System.out.print("+"); for (int i = 1; i <= 10; i++) { System.out.print("/\\"); System.out.println("+"); public static void drawBody() { for (int line = 1; line <= 5; line++) { System.out.print("|"); for (int spaces = 1; spaces <= 20; spaces++) { System.out.print(" "); System.out.println("|"); 110
110
Adding a constant public class Sign { public static final int HEIGHT = 5; public static void main(String[] args) { drawLine(); drawBody(); } public static void drawLine() { System.out.print("+"); for (int i = 1; i <= HEIGHT * 2; i++) { System.out.print("/\\"); System.out.println("+"); public static void drawBody() { for (int line = 1; line <= HEIGHT; line++) { System.out.print("|"); for (int spaces = 1; spaces <= HEIGHT * 4; spaces++) { System.out.print(" "); System.out.println("|"); 111
111
Complex figure w/ constant
Modify the Mirror code to be resizable using a constant. A mirror of size 4: #================# | <><> | | <>....<> | | <> <> | |<> <>| A mirror of size 3: #============# | <><> | | <>....<> | |<> <>|
112
Using a constant Constant allows many methods to refer to same value:
public static final int SIZE = 4; public static void main(String[] args) { topHalf(); printBottom(); } public static void topHalf() { for (int i = 1; i <= SIZE; i++) { // OK ... public static void bottomHalf() { for (int i = SIZE; i >= 1; i--) { // OK 113
113
Loop tables and constant
Let's modify our loop table to use SIZE This can change the amount added in the loop expression #================# #============# | <><> | | <><> | | <>....<> | | <>....<> | | <> <> | |<> <>| |<> <>| |<> <>| |<> <>| | <>....<> | | <> <> | | <><> | | <>....<> | #============# | <><> | #================# SIZE line spaces dots 4 1,2,3,4 6,4,2,0 -2*line + 8 0,4,8,12 4*line - 4 3 1,2,3 4,2,0 -2*line + 6 0,4,8 SIZE line spaces -2*line + (2*SIZE) dots 4*line - 4 4 1,2,3,4 6,4,2,0 -2*line + 8 0,4,8,12 3 1,2,3 4,2,0 -2*line + 6 0,4,8 SIZE line spaces dots 4 1,2,3,4 6,4,2,0 0,4,8,12 3 1,2,3 4,2,0 0,4,8
114
Partial solution public static final int SIZE = 4; // Prints the expanding pattern of <> for the top half of the figure. public static void topHalf() { for (int line = 1; line <= SIZE; line++) { System.out.print("|"); for (int space = 1; space <= (line * -2 + (2*SIZE)); space++) { System.out.print(" "); } System.out.print("<>"); for (int dot = 1; dot <= (line * 4 - 4); dot++) { System.out.print("."); System.out.println("|");
115
Hourglass with Constants Exercise
Modify your Hourglass program that uses nested for loops to create the following hourglass. Use a constant to scale the hourglass |””””””””””| SIZE=4;Quotes=10 \::::::::/ \::::::/ \::::/ \::/ || /::\ /::::\ /::::::\ /::::::::\ |””””””””””| Top Half Row Spaces Colons 1 8 2 6 3 4
116
Review Variables if statement Relational expressions and operators
Java’s primitive types Expressions and String Concatenation Expressions Arithmetic operators Precedence Mixing types String concatenation if statement Nested if/else if/else Relational expressions and operators Logical operators for loop nested for loop Class constants and Scope
117
Variables variable: A piece of the computer's memory that is given a name and type, and can store a value. Like preset stations on a car stereo, or cell phone speed dial: Steps for using a variable: Declare it - state its name and type Initialize it - store a value into it Use it - print it or use it as part of an expression a variable is also like the MS / MR buttons on a calculator variables must be declared before they are used, just like methods 118
118
Java's primitive types primitive types: 8 simple types for numbers, text, etc. Java also has object types, which we'll talk about later Name Description Examples int integers (up to ) 42, -3, 0, double real numbers (up to 10308) 3.1, , 9.4e3 char single text characters 'a', 'X', '?', '\n' boolean logical values true, false Why does Java distinguish integers vs. real numbers? We're basically going to manipulate letters and numbers. We make the integer / real number distinction in English as well. We don't ask, "How many do you weigh?" or, "How much sisters do you have?" Part of the int/double split is related to how a computer processor crunches numbers. A CPU does integer computations and a Floating Point Unit (FPU) does real number computations. Why does Java separate int and double? Why not use one combined type called number? 119
119
Expressions expression: A value or operation that computes a value.
Examples: * 5 (7 + 2) * 6 / 3 42 The simplest expression is a literal value. -242 “Hello World” 3.4 A complex expression can use operators and parentheses.
120
Arithmetic operators operator: Combines multiple values or expressions. + addition - subtraction (or negation) * multiplication / division % modulus (a.k.a. remainder) As a program runs, its expressions are evaluated. 1 + 1 evaluates to 2 System.out.println(3 * 4); prints 12 How would we print the text 3 * 4 ?
121
Precedence precedence: Order in which operators are evaluated.
Generally operators evaluate left-to-right is (1 - 2) - 3 which is -4 But * / % have a higher level of precedence than * 4 is 13 6 + 8 / 2 * 3 * 3 is 18 Parentheses can force a certain order of evaluation: (1 + 3) * 4 is 16 Spacing does not affect order of evaluation 1+3 * 4-2 is 11
122
Mixing types When int and double are mixed, the result is a double.
The conversion is per-operator, affecting only its operands. 7 / 3 * / 2 \_/ | * / 2 \___/ | / 2 \_/ | \________/ | 3 / 2 is 1 above, not 1.5. / 3 * / 6 \___/ | * / 6 \_____/ | / 6 \_/ | \_________/ | \______________/ | I don't usually go through the expression on the right; I just show it very quickly and move on.
123
String concatenation string concatenation: Using + between a string and another value to make a longer string. "hello" + 42 is "hello42" 1 + "abc" + 2 is "1abc2" "abc" is "abc12" "abc" is "3abc" "abc" + 9 * 3 is "abc27" "1" + 1 is "11" "abc" is "3abc" Use + to print a string and an expression's value together. System.out.println("Grade: " ( ) / 2); Output: Grade: 83.5
124
Executes a block of statements only if a test is true
The if statement Executes a block of statements only if a test is true if (test) { statement; ... } Example: double gpa = console.nextDouble(); if (gpa >= 3.0) { System.out.println("Application accepted.");
125
Chooses between outcomes using many tests
Nested if/else Chooses between outcomes using many tests if (test) { statement(s); } else if (test) { } else { } Example: if (x > 0) { System.out.println("Positive"); } else if (x < 0) { System.out.println("Negative"); System.out.println("Zero");
126
Relational expressions
if statements and for loops both use logical tests. if (i <= 10) { ... for (int i = 1; i <= 10; i++) { ... These are boolean expressions, seen in Ch. 5. Tests use relational operators: Operator Meaning Example Value == equals 1 + 1 == 2 true != does not equal 3.2 != 2.5 < less than 10 < 5 false > greater than 10 > 5 <= less than or equal to 126 <= 100 >= greater than or equal to 5.0 >= 5.0 Note that == tests equality, not = . The = is used for the assignment operator!
127
Logical operators Tests can be combined using logical operators:
"Truth tables" for each, used with logical values p and q: Operator Description Example Result && and (2 == 3) && (-1 < 5) false || or (2 == 3) || (-1 < 5) true ! not !(2 == 3) p q p && q p || q true false p !p true false
128
for loop syntax header for (initialization; test; update) { statement;
body header for (initialization; test; update) { statement; ... } Perform initialization once. Repeat the following: Check if the test is true. If not, stop. Execute the statements. Perform the update.
129
Class constants class constant: A fixed value visible to the whole program. value can be set only at declaration; cannot be reassigned Syntax: public static final type name = value; name is usually in ALL_UPPER_CASE Examples: public static final int DAYS_IN_WEEK = 7; public static final double INTEREST_RATE = 3.5; public static final int SSN = ;
130
Scope scope: The part of a program where a variable exists. From its declaration to the end of the { } braces A variable declared in a for loop exists only in that loop. A variable declared in a method exists only in that method. public static void example() { int x = 3; for (int i = 1; i <= 10; i++) { System.out.println(x); } // i no longer exists here } // x ceases to exist here x's scope i's scope
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.