Could someone help me out finishing this task? I'd be very grateful!
Finish the class method 'copy(Fraction source, Fraction target)', so that after calling this method 'source' is unchanged and 'target' is made identical to 'source'.
At this line: target = source; // Here I need to put the code
class Fraction { Integer nominator; Integer denominator; } class Main { public static void copy(Fraction source, Fraction target) { target = source; // Here I need to put the code } public static Fraction createFraction(Integer nominator, Integer denominator) { Fraction fraction = new Fraction(); fraction.nominator = nominator; fraction.denominator = denominator; return fraction; } public static void main(String[] arguments) { final Integer ONE = 1; final Integer TWO = 2; final Integer THREE = 3; final Fraction SOURCE = createFraction(ONE, TWO); final Fraction TARGET = createFraction(TWO, THREE); copy(SOURCE, TARGET); System.out.println("SOURCE: " + toString(SOURCE)); System.out.println("TARGET: " + toString(TARGET)); } public static String toString(Fraction fraction) { return fraction.nominator + "/" + fraction.denominator; } }
Update target
(not the reference), specifically copy the source
nominator
and denominator
values to target.nominator
and target.denominator
respectively. Like,
public static void copy(Fraction source, Fraction target)
{
// target = source; // Good try, but this just updates a local reference
target.nominator = source.nominator; // <-- copy the `nominator`
target.denominator = source.denominator; // <-- copy the `denominator`
}
Alternatively, but along the same lines, add a setFraction
function to Fraction
like,
public void setFraction(Fraction f) {
this.nominator = f.nominator;
this.denominator = f.denominator;
}
Also, you shouldn't modify toString()
like that. Add it to Fraction
as well,
@Override
public String toString() {
return nominator + "/" + denominator;
}
And I would also override Object.equals(Object)
in Fraction
.
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o instanceof Fraction) {
Fraction that = (Fraction) o;
return nominator.equals(that.nominator) && denominator.equals(that.denominator);
}
return false;
}
Then you can write
public static void copy(Fraction source, Fraction target)
{
target.setFraction(source);
}
And if you followed along with toString
then
System.out.println("SOURCE: " + toString(SOURCE));
System.out.println("TARGET: " + toString(TARGET));
Can be
System.out.println("SOURCE: " + SOURCE);
System.out.println("TARGET: " + TARGET);
System.out.println("TARGET.equals(SOURCE): " + TARGET.equals(SOURCE));
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.