Как напечатать двойное число в дробном классе

Эта программа должна принимать два числителя и два знаменателя и выводить их в виде дроби, а также складывать и умножать указанные дроби. Также требуется, чтобы у меня был класс драйвера и дроби, который выполняет сложение, умножение, печатает дробь и печатает как двойное число. Это относится к классу Fraction. Я не могу понять, как заставить фракцию печатать как двойную в моем классе фракций. Я хотел бы знать, как заставить printAsDouble() работать с тем, что у меня есть. Также есть ли способ использовать вывод Fraction add или Fraction multi и отправить его через printAsDouble()?

Вот мой код:

public class Fraction

{

    int numer, denom;
    double end;

    public int getNumerator()
    {
        return this.numer;
    };

    public void setNumerator(int inNumer)
    {
        this.numer = inNumer;
    }

    public int getDenominator()
    {
        return this.denom;
    };

    public void setDenominator(int inDenom)
    {
        this.denom = inDenom;
    }

    public Fraction add(Fraction input)
    {
        Fraction output = new Fraction();
        output.setNumerator((this.getNumerator()*input.getDenominator())+(input.getNumerator()*this.getDenominator()));
        output.setDenominator(this.getDenominator()*input.getDenominator());
        return output;
    }

    public Fraction multi(Fraction input)
    {
        Fraction output = new Fraction();
        output.setNumerator(input.getNumerator()*this.getNumerator());
        output.setDenominator(input.getDenominator()*this.getDenominator());
        return output;
    };

    public int print(Fraction input)
    {
       System.out.println(this.getNumerator + "/" + this.getDenominator);
       System.out.println(input.getNumerator + "/" + input.getDenominator);
    };

    public double printAsDouble(numer denom)
    {
        double numer, denom;

        System.out.println();
        System.out.println();
    };
};

Любая помощь или точка в правильном направлении будут оценены!


person Pysicist    schedule 26.11.2014    source источник
comment
Похоже на дубликат stackoverflow.com/questions/3144610/   -  person Lucia Pasarin    schedule 26.11.2014
comment
в numer классе? Кстати, ваш код не скомпилируется, и почему бы просто не сделать System.out.println(numer); или System.out.println(deamon);?   -  person A4L    schedule 26.11.2014
comment
В качестве примечания: вы, вероятно, не должны иметь параметры в своих методах печати. Вы просто должны напечатать дробь, представленную текущим объектом. Драйвер (основной), вероятно, должен создавать два отдельных объекта Fraction и печатать их каждый, используя свои собственные методы печати.   -  person RealSkeptic    schedule 26.11.2014


Ответы (2)


Вам, вероятно, просто нужен этот актерский состав:

public void printAsDouble()
{
    double result = (double)numer / denom; // class attributes
    System.out.println(result);
}

or

public double getAsDouble()
{
    double result = (double)numer / denom; // class attributes
    return result;
}

иначе double result = numer / denom; будет преобразовано в int.

double printAsDouble() выглядит на самом деле семантически неверным для меня.

person Lucia Pasarin    schedule 26.11.2014
comment
Вы предполагали, что этот метод будет static, потому что он не использует numer и denom, которые хранятся в объекте? Или вы намеревались использовать эти значения? Наличие параметров с теми же именами, что и переменные экземпляра класса, ОЧЕНЬ сбивает с толку, особенно в нестатическом методе. - person Dawood ibn Kareem; 26.11.2014
comment
Спасибо за помощь, я определенно думал об этом. - person Pysicist; 26.11.2014
comment
@DavidWallace На самом деле я просто скопировал метод из описания вопроса. Спасибо, что заметили! - person Lucia Pasarin; 26.11.2014
comment
Верно. Мой Eclipse настроен на выдачу предупреждения о компиляции, когда я дублирую такие имена. Я рекомендую сделать то же самое, потому что это почти всегда ошибка. - person Dawood ibn Kareem; 26.11.2014
comment
Отлично, ваш ответ выглядит намного лучше после редактирования. +1, Люсия. - person Dawood ibn Kareem; 26.11.2014
comment
@DavidWallace Спасибо за совет! - person Lucia Pasarin; 26.11.2014

Ваш числитель и знаменатель уже сохранены в вашем объекте, поэтому нет смысла передавать их вашему методу печати. Вероятно, было бы целесообразно иметь метод get, а также метод print, если у вас есть другие способы использования этого double. Так что я бы сделал что-то вроде этого.

public double getValue() {
   return (double)numer / denom;
}

public void printAsDouble() {
    System.out.println(getValue());
}

Приведение к double необходимо для предотвращения округления, которое происходит автоматически при целочисленном делении.

person Dawood ibn Kareem    schedule 26.11.2014
comment
Есть ли способ взять Fraction from Fraction add и передать его вывод через printAsDouble()? - person Pysicist; 26.11.2014
comment
Да, если frac1 и frac2 две переменные типа Fraction, вы можете написать что-то вроде Fraction sum = frac1.add(frac2);, а затем sum.printAsDouble();. Кстати, такого рода вещи будут намного проще, если вы добавите в свой класс Fraction конструктор, который принимает числитель и знаменатель в качестве параметров. - person Dawood ibn Kareem; 27.11.2014