Java Reference
In-Depth Information
9 System.out.println(r1 +
" + "
+ r2 +
" = "
+ r1.add(r2));
10 System.out.println(r1 +
" - "
+ r2 +
" = "
+ r1.subtract(r2));
11 System.out.println(r1 +
" * "
+ r2 +
" = "
+ r1.multiply(r2));
12 System.out.println(r1 +
" / "
+ r2 +
" = "
+ r1.divide(r2));
13 System.out.println(r2 +
" is "
+ r2.doubleValue());
14 }
15 }
add
2 + 2/3 = 8/3
2 - 2/3 = 4/3
2 * 2/3 = 4/3
2 / 2/3 = 3
2/3 is 0.6666666666666666
The
main
method creates two rational numbers,
r1
and
r2
(lines 5-6), and displays the results
of
r1 + r2
,
r1 - r2
,
r1 x r2
, and
r1 / r2
(lines 9-12). To perform
r1 + r2
, invoke
r1.add(r2)
to return a new
Rational
object. Similarly, invoke
r1.subtract(r2)
for
r1
- r2
,
r1.multiply(r2)
for
r1 x r2
, and
r1.divide(r2)
for
r1 / r2
.
The
doubleValue()
method displays the double value of
r2
(line 13).
The double-
Value()
method is defined in
java.lang.Number
and overridden in
Rational
.
Note that when a string is concatenated with an object using the plus sign (
+
), the object's
string representation from the
toString()
method is used to concatenate with the string. So
r1 + " + " + r2 + " = " + r1.add(r2)
is equivalent to
r1.toString() + " + "
+ r2.toString() + " = " + r1.add(r2).toString()
.
The
Rational
class is implemented in Listing 13.13.
L
ISTING
13.13
Rational.java
1
public class
Rational
extends
Number
implements
Comparable<Rational> {
2
// Data fields for numerator and denominator
3
private long
numerator =
0
;
4
private long
denominator =
1
;
5
6
/** Construct a rational with default properties */
7
public
Rational() {
8
this
(
0
,
1
);
9 }
10
11
/** Construct a rational with specified numerator and denominator */
12
public
Rational(
long
numerator,
long
denominator) {
13
long
gcd = gcd(numerator, denominator);
14
this
.numerator = ((denominator >
0
) ?
1
:
-1
) * numerator / gcd;
15
this
.denominator = Math.abs(denominator) / gcd;
16 }
17
18
/** Find GCD of two numbers */
19
private static long
gcd(
long
n,
long
d) {
20
long
n1 = Math.abs(n);
21
long
n2 = Math.abs(d);
22
int
gcd =
1
;
23
24
for
(
int
k =
1
; k <= n1 && k <= n2; k++) {
25
if
(n1 % k ==
0
&& n2 % k ==
0
)
26 gcd = k;
27 }
28
29
return
gcd;
Search WWH ::
Custom Search