Midterm Review Session

Midterm Review Session
Programming Problems
For more practice:
http://webster.cs.washington.edu:8080/practiceit/
Copyright 2009 by Pearson Education
Midterm Logistics
 Bring your UW Student ID card!!
 Will check your ID while you’re leaving
 Bring your stuff with you while you exit (don’t go back to seat)
 60 minute exam
 -10 if you start early or try to write after time
 Any paper notes allowed, but NO ELECTRONICS
 Book OK, section handouts OK, past exams + solutions OK, etc.
 NO CALCULATORS! NO LAPTOPS!
 Aiming for a median of 80
 Will be a curve if the exam is too hard, will not have a hurtful
curve if exam is too easy
Copyright 2009 by Pearson Education
2
About the Exam
 100 pts, 20% of course grade
 Non-programming – 61 pts

Expressions (10), parameter mystery (12), if/else simulation (12),
while loop simulation (12), assertions (15)
 Easy Programming – 15 pts
 Medium Programming – 15 pts
 Really Hard Programming – 9 pts
 Topics covered: Chapters 1-5
 Topics not covered: see website!
 Includes Graphics, printf, do/while, break
Copyright 2009 by Pearson Education
3
More Exam Info
 Non-programming questions
 You do not need to show your work
 You are not allowed to use calculators (e.g. on expressions)
 Programming questions
 Are not graded on style, only external correctness
 Must write valid Java code that would compile



Will not grade comments or pseudo-code
Do NOT use abbreviations
Do not have to write import statements
 Substantial partial credit is given for partially working solutions

Write as much as you can: even a method header and the beginnings
of a while loop could earn you partial points!
 More info on course website!
Copyright 2009 by Pearson Education
4
General Tips
 BE AFRAID. Success on HW is not an indication of being
prepared for the exam.
 Watch the clock!
 The hardest part about this exam will be the time limit.
 PRACTICE Q1-Q5 so that you can go through them fast
and accurately! You want as much time as possible for the
programming questions.
 Write as much as you can!
 A partial answer is better than none at all.
 Writing the correct method header will earn at least 1 point.
 Writing a partial loop, if statements, returns, etc. will points too
Copyright 2009 by Pearson Education
5
General Tips
 Read the instructions now and learn the format so you
won't be surprised tomorrow
 The format of the midterm will be the same as the samples
 For more practice, use Marty Stepp's Practice-it tool:
http://webster.cs.washington.edu:8080/practiceit/
Copyright 2009 by Pearson Education
6
Concepts Review
Some essential topics from Ch1-5
Copyright 2009 by Pearson Education
For-loops
 Use to repeat stuff when you know exactly* how much
you want to repeat
 * Could also have a variable or expression that tells you exactly
how much you want to repeat
 Nested for-loops: loops within a loop
 When you want to do task multiple times, and that task has
repetition to it
 E.g. multiplication table
 Cumulative sum: variable that keeps a sum in progress
and is updated repeatedly until summing is finished
 In general: think about bounds, possible fencepost issues
Copyright 2009 by Pearson Education
8
Conditionals and Tests
 If/else statement: Decide between several logical choices
 While loop: Repeat unknown number of times
 Sentinel loops: repeat until a certain signal is seen (e.g. prompt
until you see a -1)
 boolean: primitive type with a true or false value
 When to return??
 Boolean flag is helpful
Copyright 2009 by Pearson Education
9
Strings
 length() to get length of a String
 indexOf/contains to search for substring within
String
 equals/equalsIgnoreCase to test equality
 startsWith/endsWith to test beginning/end of word
 substring(index1, index2) to get a piece of a String
 index1 inclusive, index2 exclusive
 Index 0 for first letter, index length() -1 for last letter
 + to concatenate Strings together
Copyright 2009 by Pearson Education
10
Other miscellaneous stuff
 Scanner to prompt for input
 hasNext, hasNextInt, hasNextDouble, hasNextLine
 Random to get a random value
 To generate random number between [min, max]:
r.nextInt(range) + min
Where range: max – min + 1
 r.nextInt(51) + 50; // produces random value 50 - 100
 Expressions stuff:
 % 10 and / 10 to get digits
 % 2 == 0 to test for even (!= for odd)
Copyright 2009 by Pearson Education
11
Programming Practice
Practice problems from previous exams
Copyright 2009 by Pearson Education
Programming Tips
 Read the problems carefully:
 Does it want you to print a result, or return it?
 What values does the method use for computation? Are these
values parameters, are they read from a Scanner, etc.?
 What type of value (if any) does the method return?
 Have you handled all special cases?
 What if the integer is 0, or negative?
 What if the string has no letters?
 What if there is only one word in the string? Many words?
Copyright 2009 by Pearson Education
13
Practice Problem 1: Print Multiples
 Write a static method named printMultiples
 Takes two integers n and m as parameters and prints the
first m multiples of n
 Assume m >= 1
 Multiples are separated by commas
printMultiples(3, 5);
The first 5 multiples of 3 are 3, 6, 9, 12, 15
printMultiples(7, 3);
The first 3 multiples of 7 are 7, 14, 21
Copyright 2009 by Pearson Education
14
Print Multiples Solution
public static void printMultiples(int n, int times) {
System.out.print("The first " + times +
" multiples of " + n + " are " + n);
for (int i = 2; i <= times; i++) {
System.out.print(", " + i * n);
}
System.out.println();
}
Copyright 2009 by Pearson Education
15
Practice Problem 2: Count Even Digits
 Write a static method named countEvenDigits
 Accepts an integer as its parameter and returns the
number of even-valued digits in that number.
 Even digits: 0, 2, 4, 6, or 8
 Assume value passed to your method is non-negative
// 4 even digits: two 8s, the 4, and 6
int x = countEvenDigits(8346387) ;
System.out.println("x is " + x);
Copyright 2009 by Pearson Education
// x is 4
16
Count Even Digits Solution
public static int countEvenDigits(int n) {
int count = 0;
while (n != 0) {
int digit = n % 10;
n = n / 10;
if (digit % 2 == 0) {
count++;
}
}
return count;
}
Copyright 2009 by Pearson Education
17
Practice Problem 3: Cheerleader
 Write a static method named
cheerleader
 Takes two params:
 number of lines of output
 number of "cheers" per line
 Cheer structure:
 1 cheer: Go
 2 cheers: Go Team Go
 3 cheers: Go Team Go Team Go
cheerleader(2, 1);
Go
Go
cheerleader(4, 3);
Go Team Go Team Go
Go Team Go Team Go
Go Team Go Team Go
Go Team Go Team Go
cheerleader(2, 4);
Go Team Go Team Go Team Go
Go Team Go Team Go Team Go
 Each line indented by 3
spaces; first line at 0 spaces
Copyright 2009 by Pearson Education
18
Cheerleader Solution
public static void cheerleader(int lines, int cheers) {
for (int line = 1; line <= lines; line++) {
for (int space = 1; space <= line - 1; space++) {
System.out.print("
");
}
for (int cheer = 1; cheer <= cheers - 1; cheer++) {
System.out.print("Go Team ");
}
System.out.println("Go");
}
}
Copyright 2009 by Pearson Education
19
Practice Problem 4: Favorite Letter
 Write a static method named
faveLetter
 Accepts two parameters:
 Scanner for the console
 Favorite letter represented as a
one-letter String
 Repeatedly prompt the user
until two consecutive words are
entered that start with that
letter.
 Case sensitive
(assume a Scanner named console
was made earlier in code)
faveLetter(console, "y");
Looking for two "y" words.
Type a word: hi
Type a word: bye
Type a word: yes
Type a word: what?
Type a word: yellow
Type a word: yippee
"y" is for "yippee"
 Print a message showing the last
word typed.
Copyright 2009 by Pearson Education
20
Favorite Letter Solution
public static void faveLetter(Scanner console, String letter) {
System.out.println("Looking for two \"" + letter + "\" words.");
int count = 0;
String word = "";
while (count < 2) {
System.out.print("Type a word: ");
word = console.next();
if (word.startsWith(letter)) {
count++;
} else {
count = 0;
}
}
System.out.println("\"" + letter + "\" is for \"" + word + "\"");
}
Copyright 2009 by Pearson Education
21
Practice Problem 5: Random Rects
 Write a static method named
randomRects
 Calculates and displays the area of
randomly-generated rectangles.
 Each rectangle has random width and
height btwn 1 and 10 inclusive
 Keep generating rectangles until an
increasing sequence of four areas is
printed.
randomRects();
w: 5, h: 6, area: 30
w: 10, h: 5, area: 50
w: 2, h: 8, area: 16
w: 4, h: 4, area: 16
w: 2, h: 9, area: 18
w: 8, h: 3, area: 24
w: 7, h: 2, area: 14
w: 3, h: 10, area: 30
w: 7, h: 9, area: 63
w: 9, h: 8, area: 72
End random rectangles.
 Stop when the last four rectangles
generated have areas of a1, a2, a3 and
a4 such that a1 < a2 < a3 < a4
Copyright 2009 by Pearson Education
22
Random Rectangles Solution
public static void randomRects() {
Random r = new Random();
int last = 0;
int count = 0;
while (count != 4) {
int w = r.nextInt(10) + 1;
int h = r.nextInt(10) + 1;
int area = w * h;
if (area <= last) {
count = 1;
// need to count first rect in sequence
} else {
count++;
}
System.out.println("w: " + w + ", h: " + h + ", area: " + area);
last = area;
}
System.out.println("End random rectangles.");
}
Copyright 2009 by Pearson Education
23
Non-Programming Practice
Tips on Questions 1-4
(For assertions help, see lecture 14)
Copyright 2009 by Pearson Education
Expressions
 integer division and mod: quotient and remainder
14 / 3 is 4,
7 / 10 is 0,
14 % 3 is 2
7 % 10 is 7
 precedence: ( ) before * / % before + 5
5
5
5
+ 2 * 6 - (1 + 7) % 3
+ 2 * 6 8
% 3
+ 12
8
% 3
+ 12
2
17
2
15
Copyright 2009 by Pearson Education
25
Expressions 2
 String concatenation: same precedence as integer + -,
evaluated left-to-right with other + - operations
1 + 2 + "3" + 4 +
3
+ "3" + 4 +
"33"
+ 4 +
"334"
+
"3345"
5
5
5
5
 type promotion: done as needed when int and double
are mixed
50 / 6 / 5.0
8
/ 5.0
1.6
Copyright 2009 by Pearson Education
26
Expression questions
 Evaluate the following expressions:
16 / 3 + 3.2 * 2
8 / 7 + "5 / 4" + 8 / 3
88 % 10 % 3 * 16 / 10
29 / 3 / 2 / 4.0 + 3.6 * 2
1.4 + (3 + 2 * 6) / (8 - 14 / 3) * 2.2
Copyright 2009 by Pearson Education
27
Expression answers
 Correct answers:
16 / 3 + 3.2 * 2
8 / 7 + "5 / 4" + 8 / 3
88 % 10 % 3 * 16 / 10
29 / 3 / 2 / 4.0 + 3.6 * 2
1.4 + (3 + 2 * 6) / (8 - 14 / 3) * 2.2
Copyright 2009 by Pearson Education
11.4
"15 / 42"
3
8.2
8.0
28
Parameter mystery question
 What is the output of the following program?
public class Mystery {
public static void main(String[] args) {
String john = "skip";
String mary = "george";
String george = "mary";
String fun = "drive";
String work = "john";
speak(mary, john, fun);
speak(george, work, john);
speak(fun, "george", "work");
speak(george, mary, john);
speak(george, "john", "dance");
}
public static void speak(String mary, String john, String fun) {
System.out.println(john + " likes to " + fun + " with " + mary);
}
}
Copyright 2009 by Pearson Education
29
Parameter mystery tips
 Try making a table of the parameters passed to each call:
public class Mystery {
public static void main(String[] args) {
String john = "skip";
String mary = "george";
String george = "mary";
String fun = "drive";
String work = "john";
speak(mary, john, fun);
speak(george, work, john);
speak(fun, "george", "work");
speak(george, mary, john);
speak(george, "john", "dance");
george
mary
drive
mary
mary
skip
john
george
george
john
drive
skip
work
skip
dance
}
public static void speak(String mary, String john, String fun) {
System.out.println(john + " likes to " + fun + " with " + mary);
}
}
Copyright 2009 by Pearson Education
30
Parameter mystery answer
 What is the output of the following program?
public class Mystery {
public static void main(String[] args) {
String john = "skip";
String mary = "george";
String george = "mary";
String fun = "drive";
String work = "john";
speak(mary, john, fun);
speak(george, work, john);
speak(fun, "george", "work");
speak(george, mary, john);
speak(george, "john", "dance");
skip likes to drive with george
john likes to skip with mary
george likes to work with drive
george likes to skip with mary
john likes to dance with mary
}
public static void speak(String mary, String john, String fun) {
System.out.println(john + " likes to " + fun + " with " + mary);
}
}
Copyright 2009 by Pearson Education
31
While loop mystery question
 Given the following program,
public static void mystery(int y) {
int x = 0;
int z = 0;
while (y > 0) {
System.out.print(x + " " + z + " ");
x++;
z = z + y % 10;
y = y / 10;
}
System.out.println(x + " " + z);
}
 What is the output of the following sequence of calls?
mystery(0);
mystery(8);
mystery(32);
mystery(72);
mystery(184);
mystery(8239);
Copyright 2009 by Pearson Education
32
While loop mystery tips
 Keep track of each variable's value as it changes:
public static void mystery(int y) {
int x = 0;
int z = 0;
while (y > 0) {
System.out.print(x + " " + z + " ");
x++;
z = z + y % 10;
y = y / 10;
}
System.out.println(x + " " + z);
}
x
y
z
0
1
2
3
184
18
1
0
0
4
12
13
 What is the output of the following call?
mystery(184);
 Sometimes, these problems are performing
real computations in disguise.
 What is this problem really doing?
Copyright 2009 by Pearson Education
33
While loop mystery answers
 Given the following program,
public static void mystery(int y) {
int x = 0;
int z = 0;
while (y > 0) {
System.out.print(x + " " + z + " ");
x++;
z = z + y % 10;
y = y / 10;
}
System.out.println(x + " " + z);
}
 What is the output of the following sequence of calls?
mystery(0);
mystery(8);
mystery(32);
mystery(72);
mystery(184);
mystery(8239);
Copyright 2009 by Pearson Education
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
8
2
2
4
9
2
2
2
2
5
9
12 3 13
12 3 14 4 22
34