Ch02 Primitive Data Definite Loops
Ch02 Primitive Data Definite Loops
Chapter 2
Primitive Data and Definite Loops
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
Description
Examples
int
integers
(up to 231 - 1)
double
real numbers
(up to 10308)
char
boolean
logical values
true, false
Expressions
expression: A value or operation that computes a
value.
Examples:
1 + 4 * 5
(7 + 2) * 6 / 3
42
Arithmetic operators
operator: Combines multiple values or expressions.
+
*
/
%
addition
subtraction (or negation)
multiplication
division
modulus (a.k.a. remainder)
4
10 ) 45
40
5
52
27 ) 1425
135
75
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.
6
43
5 ) 218
20
18
15
3
45 % 6
2 % 2
8 % 20
11 % 0
Applications of % operator:
Obtain last digit of a number: 230857 % 10 is 7
Obtain last 4 digits:
7 % 2 is 1, 42 % 2 is 0
7
Precedence
precedence: Order in which operators are evaluated.
Generally operators evaluate left-to-right.
1 - 2 - 3 is (1 - 2) - 3 which is -4
But * / % have a higher level of precedence than + 1 + 3 * 4
is 13
6 + 8 / 2 * 3
6 +
4
* 3
6 +
12
is 18
Precedence examples
1 * 2 + 3 * 5 % 4
\_/
|
2
+ 3 * 5 % 4
\_/
|
2
+ 15
% 4
\___/
|
2
+
3
\________/
|
5
1 + 8 % 3 * 2 - 9
\_/
|
1 +
2
* 2 - 9
\___/
|
1 +
4
- 9
\______/
|
5
- 9
\_________/
|
-4
9
Precedence questions
What values result from the following expressions?
9 / 5
695 % 20
7 + 6 * 5
7 * 6 + 5
248 % 100 / 5
6 * 3 - 9 / 4
(5 - 7) * 4
6 + (18 % (17 - 12))
10
11
\___/
|
4.8
+
9.0
/ 2.0
\_____/
|
4.8
+
4.5
\____________/
|
9.3
12
Mixing types
When int and double are mixed, the result is a double.
4.2 * 3 is 12.6
\___/
|
2.4
+ 3 / 2
\_/
|
2.4
+
1
\________/
|
3.4
2.0 + 10 / 3 * 2.5 - 6 / 4
\___/
|
2.0 +
3
* 2.5 - 6 / 4
\_____/
|
2.0 +
7.5
- 6 / 4
\_/
|
2.0 +
7.5
1
\_________/
|
9.5
1
\______________/
|
8.5
13
String concatenation
string concatenation: Using + between a string and
another value to make a longer string.
"hello" + 42
1 + "abc" + 2
"abc" + 1 + 2
1 + 2 + "abc"
"abc" + 9 * 3
"1" + 1
4 - 1 + "abc"
is
is
is
is
is
is
is
"hello42"
"1abc2"
"abc12"
"3abc"
"abc27"
"11"
"3abc"
Variables
15
Receipt example
What's bad about the following code?
public class Receipt {
public static void main(String[] args) {
// Calculate total owed, assuming 8% tax / 15% tip
System.out.println("Subtotal:");
System.out.println(38 + 40 + 30);
System.out.println("Tax:");
System.out.println((38 + 40 + 30) * .08);
System.out.println("Tip:");
System.out.println((38 + 40 + 30) * .15);
System.out.println("Total:");
System.out.println(38 + 40 + 30 +
(38 + 40 + 30) * .08 +
(38 + 40 + 30) * .15);
}
}
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:
Initialize it
Use it
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;
myGPA
double myGPA;
18
Assignment
assignment: Stores a value into a variable.
The value can be an expression; the variable stores its result.
Syntax:
name = expression;
int x;
x = 3;
double myGPA;
myGPA = 1.0 + 2.25;
myGPA 3.25
19
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
3
11
// 3 here
x = 4 + 7;
System.out.println("now x is " + x); // now x is 11
20
Declaration/initialization
A variable can be declared/initialized in one statement.
Syntax:
type name = value;
myGPA 3.95
14
21
3
5
// ???
22
double avg = 11 / 2;
myGPA 4.0
avg
5.0
Compiler errors
A variable can't be used until it is assigned a value.
int x;
System.out.println(x);
int x = 3;
int x = 5;
Printing a variable's
value
Use + to print a string and a variable's value on one
line.
double grade = (95.1 + 71.9 + 82.6) / 3.0;
System.out.println("Your grade was " + grade);
int students = 11 + 17 + 4 + 19 + 14;
System.out.println("There are " + students +
" students in the course.");
Output:
Your grade was 83.2
There are 65 students in the course.
25
Receipt question
Improve the receipt program using variables.
public class Receipt {
public static void main(String[] args) {
// Calculate total owed, assuming 8% tax / 15% tip
System.out.println("Subtotal:");
System.out.println(38 + 40 + 30);
System.out.println("Tax:");
System.out.println((38 + 40 + 30) * .08);
System.out.println("Tip:");
System.out.println((38 + 40 + 30) * .15);
System.out.println("Total:");
System.out.println(38 + 40 + 30 +
(38 + 40 + 30) * .15 +
(38 + 40 + 30) * .08);
26
Receipt answer
public class Receipt {
public static void main(String[] args) {
// Calculate total owed, assuming 8% tax / 15% tip
int subtotal = 38 + 40 + 30;
double tax = subtotal * .08;
double tip = subtotal * .15;
double total = subtotal + tax + tip;
27
28
header
body
Initialization
for (int i = 1; i <= 6; i++) {
System.out.println("I am so smart");
}
Test
for (int i = 1; i <= 6; i++) {
System.out.println("I am so smart");
}
int x = 2;
x++;
double gpa = 2.5;
gpa--;
// x = x + 1;
// x now stores 3
// gpa = gpa - 1;
// gpa now stores 1.5
33
Modify-and-assign
shortcuts to modify a variable's value
Shorthand
variable +=
variable -=
variable *=
variable /=
variable %=
value;
value;
value;
value;
value;
x += 3;
// x = x + 3;
gpa -= 0.5;
number *= 2;
// number = number * 2;
34
squared
squared
squared
squared
squared
squared
=
=
=
=
=
=
"
"
"
"
"
"
+
+
+
+
+
+
1
2
3
4
5
6
*
*
*
*
*
*
1);
2);
3);
4);
5);
6);
Intuition: "I want to print a line for each number from 1 to 6"
Loop walkthrough
1
2
3
for (int i = 1; i <= 4; i++) {
4 System.out.println(i + " squared = " + (i * i));
}
5 System.out.println("Whoo!");
1
Output:
1 squared
2 squared
3 squared
4 squared
Whoo!
=
=
=
=
1
4
9
16
4
3
5
36
Output:
26.6
28.4
30.2
32.0
33.8
35.6
38
System.out.print
Prints without moving to a new line
allows you to print partial messages on the same line
int highestTemp = 5;
for (int i = -3; i <= highestTemp / 2; i++) {
System.out.print((i * 1.8 + 32) + " ");
}
Output:
26.6 28.4
30.2
Concatenate "
32.0
33.8
35.6
39
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.
40
41
Nested loops
nested loop: A loop placed inside another loop.
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:
**********
**********
**********
**********
**********
Output:
*
**
***
****
*****
43
Output:
1
22
333
4444
55555
44
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 i = 1; i <= 5; i++) {
for (int j = 1; j <= 10; i++) {
System.out.print("*");
}
System.out.println();
}
45
Complex lines
What nested for loops produce the following output?
inner loop (repeated characters on each line)
....1
...2
..3
.4
5
46
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:
4 7 10 13 16
Loop tables
What statement in the body would cause the loop to
print:
2 7 12 17 22
10
12
15
12
17
20
17
22
25
22
49
17
-4
17
13
-8
13
-12
-16
-20
1
50
line # of dots
-1 * line
-1 * line + 5
-1
-2
-3
-4
-5
// 4 dots
51
Output:
....1
...2
..3
.4
5
52
Answer:
....1
...22
..333
.4444
55555
53
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.print(".");
}
System.out.println();
}
54
55
Development strategy
Recommendations for managing complexity:
1. Design the program (think about steps or methods
needed).
write an English description of steps required
use this description to decide the methods
#================#
|
<><>
|
|
<>....<>
|
2. Create a table of patterns of characters
| <>........<> |
use table to write your for loops
|<>............<>|
|<>............<>|
| <>........<> |
|
<>....<>
|
|
<><>
|
#================#
56
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.
print a star.
}
print 12 stars.
************
*
*
*
*
*
*
*
*
*
*
************
57
Pseudo-code algorithm
1. Line
# , 16 =, #
2. Top half
|
spaces (decreasing)
<>
dots (increasing)
<>
spaces (same as above)
|
#================#
|
<><>
|
|
<>....<>
|
| <>........<> |
|<>............<>|
|<>............<>|
| <>........<> |
|
<>....<>
|
|
<><>
|
#================#
58
Methods from
pseudocode
public class Mirror {
public static void main(String[] args) {
line();
topHalf();
bottomHalf();
line();
}
public static void topHalf() {
for (int line = 1; line <= 4; line++) {
// contents of each line
}
}
public static void bottomHalf() {
for (int line = 1; line <= 4; line++) {
// contents of each line
}
}
2. Tables
A table for the top half:
Compute spaces and dots expressions from line number
line
spaces
line * -2 + 8
dots
4 * line - 4
12
12
#================#
|
<><>
|
|
<>....<>
|
| <>........<> |
|<>............<>|
|<>............<>|
| <>........<> |
|
<>....<>
|
|
<><>
|
#================#
60
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("|");
for (int space = 1; space <= (line * -2 + 8); space++) {
System.out.print(" ");
}
System.out.print("<>");
for (int dot = 1; dot <= (line * 4 - 4); dot++) {
System.out.print(".");
}
System.out.print("<>");
for (int space = 1; space <= (line * -2 + 8); space++) {
System.out.print(" ");
}
System.out.println("|");
62
Class constants
and scope
63
#============#
|
<><>
|
| <>....<> |
|<>........<>|
|<>........<>|
| <>....<> |
|
<><>
|
#============#
64
Limitations of variables
Idea: Make a variable to represent the size.
Use the variable's value in the methods.
65
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.
x's scope
66
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
67
Class constants
class constant: A fixed value visible to the whole program.
value can be set only at declaration; cannot be reassigned
Syntax:
68
+/\/\/\/\+
|
|
|
|
+/\/\/\/\+
Adding a constant
public class Sign {
public static final int HEIGHT = 5;
public static void main(String[] args) {
drawLine();
drawBody();
drawLine();
}
public static void drawLine() {
System.out.print("+");
for (int i = 1; i <= HEIGHT * 2; i++) {
System.out.print("/\\");
}
System.out.println("+");
}
Complex figure w/
constant
Modify the Mirror code to be resizable using a constant.
A mirror of size 4:
#================#
|
<><>
|
|
<>....<>
|
| <>........<> |
|<>............<>|
|<>............<>|
| <>........<> |
|
<>....<>
|
|
<><>
|
#================#
A mirror of size 3:
#============#
|
<><>
|
| <>....<> |
|<>........<>|
|<>........<>|
| <>....<> |
|
<><>
|
#============#
72
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++) {
...
}
}
public static void bottomHalf() {
for (int i = SIZE; i >= 1; i--) {
...
}
}
// OK
// OK
73
spaces
4
4
3
3
6,4,2,0
6,4,2,0
4,2,0
4,2,0
-2*line
-2*line
-2*line
-2*line
4
4
4
4
1,2,3,4
1,2,3,4
1,2,3
1,2,3
#================#
|
<><>
|
|
<>....<>
|
| <>........<> |
|<>............<>|
|<>............<>|
| <>........<> |
|
<>....<>
|
|
<><>
|
#================#
+
+
+
+
8
8
6
6
4*line
4
0,4,8,12 4*line 0,4,8,12 4*line 0,4,8
4*line 0,4,8
4*line -
#============#
|
<><>
|
| <>....<> |
|<>........<>|
|<>........<>|
| <>....<> |
|
<><>
|
#============#
74
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.print("<>");
for (int space = 1; space <= (line * -2 + (2*SIZE)); space++) {
System.out.print(" ");
}
System.out.println("|");
75
Observations about
constant
The constant can change the "intercept" in an
expression.
Usually the "slope" is unchanged.
public static final int SIZE = 4;
for (int space = 1; space <= (line * -2 + (2 * SIZE)); space+
+) {
System.out.print(" ");
}