Fini sh этот метод класса - Вы знаете, как? - PullRequest
0 голосов
/ 19 февраля 2020

Может ли кто-нибудь помочь мне закончить эту задачу? Я был бы очень признателен!

Fini sh метод класса «copy (источник дроби, цель дроби)», так что после вызова этого метода «источник» не изменяется, а «цель» сделано идентично 'source'.

В этой строке: target = source; // Здесь мне нужно поставить код

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;

	}
}

1 Ответ

0 голосов
/ 19 февраля 2020

Обновление target (не ссылка), в частности скопируйте значения source nominator и denominator в target.nominator и target.denominator соответственно. Например,

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`
}

Кроме того, добавьте setFraction функцию к Fraction, например,

public void setFraction(Fraction f) {
    this.nominator = f.nominator;
    this.denominator = f.denominator;
}

Кроме того, вы не должны изменять toString() как это. Добавьте его также к Fraction,

@Override
public String toString() {
    return nominator + "/" + denominator;
}

И я бы также переопределил Object.equals(Object) в 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;
}

Тогда вы можете написать

public static void copy(Fraction source, Fraction target)
{
    target.setFraction(source);
}

И если вы следовали вместе с toString, тогда

System.out.println("SOURCE: " + toString(SOURCE));
System.out.println("TARGET: " + toString(TARGET));

Может быть

System.out.println("SOURCE: " + SOURCE);
System.out.println("TARGET: " + TARGET);
System.out.println("TARGET.equals(SOURCE): " + TARGET.equals(SOURCE));
...