Как мне метод toString правильно распечатать результат 2 смешанных фракций? - PullRequest
0 голосов
/ 13 марта 2019

В настоящее время я делаю простой калькулятор фракций, используя java swing, но теперь я застрял на показе результатов, как только добавил опцию для получения смешанного числа. Сейчас исполняемая программа выглядит так:

Program when running

Вот что я пытался применить к методу toString:

public String toString() {
    if (this.numerator >= this.denominator) {
        String returnString = String.valueOf((this.numerator / this.denominator)+this.wholeNumber);
        int modulo = ((this.numerator % this.denominator)+wholeNumber);
        if (modulo > 0) {
            returnString += " " + modulo + "/" + this.denominator;
        }
        return returnString;
    }
    return this.numerator + "/" + this.denominator;
}

и это фрагмент для вычисления результатов для каждого оператора

 public void actionPerformed(ActionEvent e) {
    if (e.getSource() == this.computeButton){
        try {
            Fraction f1 = new Fraction(Integer.parseInt(Num1.getText()), Integer.parseInt(Den1.getText()));
            Fraction f2 = new Fraction(Integer.parseInt(Num2.getText()), Integer.parseInt(Den2.getText()));
            Fraction res;
            if (!Mixed1.getText().isEmpty())
                f1.setWholeNumber(Integer.parseInt(Mixed1.getText()));
            if (!Mixed2.getText().isEmpty()){
                f2.setWholeNumber(Integer.parseInt(Mixed2.getText()));
            }

            switch (comboBox1.getSelectedIndex()){
                case 0: //addition
                    res =f1.add(f2);
                    break;
                case 1://subtraction
                    res = f1.sub(f2);
                    break;
                case 2://multiplication
                    res = f1.mul(f2);
                    break;
                case 3://division
                    res = f1.div(f2);
                    break;

                default: res = new Fraction(1,1);
            }
            Label.setText(res.toString());

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Я бы не советовал иметь ваш wholeNumber как часть вашего Fraction класса.Вместо этого я бы сделал это Fraction (wholeNumber/1):

Fraction mixed1 = new Fraction(Integer.parseInt(Mixed1.getText()), 1);
Fraction fraction1 = new Fraction(Integer.parseInt(Num1.getText()), Integer.parseInt(Den1.getText()));

Fraction mixed2 = new Fraction(Integer.parseInt(Mixed2.getText()), 1);
Fraction fraction2 = new Fraction(Integer.parseInt(Num2.getText()), Integer.parseInt(Den2.getText()));

Тогда у вас есть только дроби, и вы можете умножить их

Fraction f1 = fraction1.mul(mixed1);
Fraction f2 = fraction2.mul(mixed2);

Тогда вы можете использовать вашивпоследствии исходный код переключателя / регистра.

Что касается дисплея, я бы сделал это следующим образом:

public String getResult() {
    String returnString = this.numerator + "/" + this.denominator;
    if (this.numerator >= this.denominator) {
        int modulo = this.numerator % this.denominator;
        if(modulo == 0) {
            int divider = this.numerator / this.denominator;
            returnString = String.valueOf(divider);
        }
    }
    return returnString;
}

Выходы

Fraction(10, 2) -> 5
Fraction(9, 3) -> 3
Fraction(8, 3) -> 8/3
Fraction(5, 2) -> 5/2

Примечание1:

Как упомянул Stultuske в комментарии, вы, вероятно, не должны использовать toString, поскольку это метод, который вы наследуете от Object

Но вы все равно можете переписать его следующим образом:

@Override
public String toString() {
    return this.numerator  + "/" + this.denominator;
}

Например, если ваш Fraction равен 8/2

toString() returns `8/2` 
getResultAsString() returns `2 * 5/4`

Примечание 2:

Не начинайте имена переменных спрописные буквы, например: mixed1, а не Mixed1

0 голосов
/ 13 марта 2019

Я постараюсь ответить вам двумя способами:

  1. О результате: 2/2 + 3/2 = 5/2, и это не 0.

В каждом методе, который вы создали, чтобы получить результат на switch (sum, sub, div и mul), попробуйте умножить все число и числитель, например:

this.numerator=*wholeNumber

О том, как отображаются результаты: Как сказал Стултуске в комментариях, попробуйте использовать метод get вместо toString
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...