Java Reference
In-Depth Information
to write a function, say
anglicizeHundreds
, to perform this service. We show
this method, together with function
anglicize
but modified to call the new
function, in Fig. 2.7.
In Fig. 2.7, function
anglicize
is finished, and we should test it before pro-
ceeding. But how do we do that? Look at function
anglicizeHundreds
in Fig.
2.7. We have “stubbed it in”, by which we mean that we have fixed it to return
something that allows us to test function
anglicize
. It does not produce the
English words for
n
, but it does produce
n
. With this function, for the call
angli-
cize(2024)
we expect to get the value
"2 thousand 24"
. Writing
anglicize-
Hundreds
in this fashion allows us to test function
anglicize
thoroughly before
proceeding.
In fact, if you test
anglicize
thoroughly, looking at “extreme” cases like
n
= 999
,
n = 1000
,
n = 1001
,
n = 999999
, you will find an error. Calling
angli-
cize(1000)
yields the value
"1 thousand 0"
, and the
0
does not belong at the
end. The problem is that we wrote
anglicizeHundreds
to handle an integer
n
in
the range
0<n<1000
, but it is called at least once with
n=0
. We should change
the specification on
anglicizeHundreds
so that it accepts integers in the range
0..1000
and also state expressly (in the specification) that the English equiva-
lent of
0
is the empty
String ""
.
In general, when programming and testing incrementally, compile often:
every few lines. Test just as often: as soon as you have written the specification
and header of a method, you can write a test for it. To facilitate testing, after writ-
ing the specification and header of a new method, write a body that is simple and
short but that allows you to test the parts of the program that call it.
The development of function
anglicizeHundreds
proceeds along similar
lines, so we do not show it. As you proceed, you will find the need for other func-
tions, e.g. a function
teenName(n)
that produces the English equivalent of
n
in
the range
10..19
and a function
tensName(n)
for
n
in the range
0..9
.
A procedural approach
The above development focused on introducing more and more functions,
/** =
English equivalent of
n
, for
0<n<1,000,000 */
public static
String anglicize(
int
n) {
if
(n >= 1000)
{
return
anglicizeHundreds(n / 1000); +
“ thousand “ + anglicizeHundreds(n % 1000);}
else
{
return
anglicizeHundreds(n % 1000); }
}
/** =
English equivalent of
n
, for
0<n<1,000 */
public static
String anglicizeHundreds(
int
n)
{
return
"" + n; }
Figure 2.7:
Function
anglicize
with stubbed-in function
anglicizeHundreds
Search WWH ::
Custom Search