Расположение печати в памяти при печати в основном методе объектов java - PullRequest
0 голосов
/ 31 мая 2019

Это печатает мне местоположение в памяти, почему это происходит и как я могу это исправить.

Это вопрос домашнего задания или экзамена:

  1. Метод умножает числитель этого RationalNumber на числитель r, а знаменатель этого RationalNumber на знаменатель r. Что из следующего можно использовать для замены / * отсутствующего кода * /, чтобы метод multiply () работал как положено?

Это решения, и мне нужно выбрать:

num = num * r.num;
den = den * r.den;





this.num = this.num * r.num;
this.den = this.den * r.den;







num = num * r.getNum();
den = den * r.getDen();

Я попробовал все, но ничего не работает.

Вот мой код:

public class RationalNumber {
    private int num;
    private int den; // den != 0

    /** Constructs a RationalNumber object.
     *  @param n the numerator
     *  @param d the denominator
     *  Precondition: d != 0
     */
    public RationalNumber(int n, int d) {
        num = n;
        den = d;
    }

    /** Multiplies this RationalNumber by r.
     *  @param r a RationalNumber object
     *  Precondition: this.den() != 0
     */
    public void multiply(RationalNumber r) {
        /* missing code */
        num = num * r.num;
        den = den * r.den;

         //this.num = this.num * r.num;
        //this.den = this.den * r.den;

        //num = num * r.getNum();
       //den = den * r.getDen();
    }

    /** @return the numerator
     */
    public int getNum() {
        /* implementation not shown */
        return num;
    }

    /** @return the denominator
     */
    public int getDen() {
        /* implementation not shown */
        return den;
    }
    public static void main(String[] args){
        RationalNumber num = new RationalNumber(10, -1);
        System.out.println(num);


    }

    // Other methods not shown.
}

1 Ответ

0 голосов
/ 31 мая 2019

Вам необходимо переопределить метод toString () класса RationalNumber.

System.out.println(num);

Приведенный выше код выведет возвращаемое значение метода toString () предоставленного класса, если мы не указали какой-либоконкретные атрибуты или методы класса.

Поскольку ваш класс RationalNumber не переопределяет toString (), он ищет свой суперкласс toString () (класс Object).

Вы можете решить эту проблему, добавив

@Override
public String toString(){
    return num + "/" + den;
}

После этого вам понадобится 2 объекта RationalNumber.

Например, по математике, 1 2 * 1 3 = 1 6

В вашем основном методе будет что-то вроде этого

public static void main(String[] args){
    RationalNumber rn1 = RationalNumber(1,2); //This represent 1/2
    RationalNUmber rn2 = RationalNumber(1,3); //This represent 1/3
    rn1.multiply(rn2); //This equals to 1/2 * 1/3, it multiply the num and den variable of rn1 object with rn2
    System.out.println(rn1); //This will invoke the toString() of rn1
}
...