CMPS 144 Spring 2026
March 4 test preview
The kinds of problems you can expect on the test include the following:
- Given some relatively simple computational problem (e.g., involving
an array) and a loop invariant to guide you, develop code to solve
the problem in a manner consistent with the specified loop invariant.
(Recall the lectures pertaining to finding the maximum value in an
array, 2-color partitioning, linear and binary search, etc.)
as well as Labs #4 and #5, in the latter of which you implemented
loops to perform 3-color partitioning.)
- Given an array whose elements are in ascending order (from least to
greatest) and a search key, trace execution of the binary search
algorithm, which finds the lowest-numbered location in the array
containing a value greater than or equal to the search key.
(Tracing execution means showing the values of relevant variables
at particular "moments in time" (namely, initially and at the end
of each loop iteration).)
- Develop Java code that solves some computational problem similar to
one that you would have worked on during any of Labs #1-5 or
Prog. Assg. #1 (the UnboundedNatural class).
- Given a relatively simple abstraction (e.g., a pair of dice, a
line segment, a calendar date), develop a Java class to implement it.
If other classes are provided as potential building blocks
(e.g., SixSidedDie, PointOnPlane),
use them in that implementation.
(Recall the TimeOfDay class in Lab #1.)
- Given a relatively simple Java class that lacks some desired
functionality, develop a child class that provides that functionality.
Among the examples of this covered in lecture or lab are
- the Coin class and its descendants,
BiasedCoin and BiasedCoinWithCounts
- the Counter class and its child
ResetableCounter, the latter of which added
functionality by which a client program could reset
a counter to its initial value
- the parent/child Java classes in Lab #2:
- Temperature and its child Temperature2
- SixSidedDie and its child
SixSidedDieWithCounts
- TimeOfDay and its child TimeOfDay12Or24
- Given an abstract Java class that "expects" its children to
supply the implementation of one or more of its abstract
method(s) (i.e., methods whose bodies are omitted), develop
such a child class. Examples:
- StringSorter and its children (Lab #3),
- BoundedCounter and its children (Lab #3),
- FilterOfInt and its children (Lab #3),
- Given a class hierarchy (e.g., Counter and its descendants in
Lab #3) and a program that makes use of objects from classes in that
hierarchy, be able to trace execution of that program and report its
results. (In particular, that would involve understanding, with respect
to a method call obj.doSomething(), which version of the
doSomething)() method actually gets called (among the
possibly multiple versions found in classes in the hierarchy).