Разделение фракций с объектами - PullRequest
0 голосов
/ 06 марта 2019

У меня есть бегун класса, который должен сохранять изменения, переворачивать метод при выполнении дробей.

public class Fraction2
{
private int numerator = 0;
private int denominator = 1;
public Fraction2()
{
    numerator = 0;
    denominator = 1;
}
public Fraction2(int num, int denom)
{
    numerator = num;
    denominator = denom;
}

public void show(int num, int denom)
{
    System.out.println(numerator + "/" + denominator);
}
public String toString()
{
    return (numerator + "/" + denominator);
}

public Fraction2 mult(Fraction2 temp)
{
    return new Fraction2(this.numerator * temp.numerator,
                         this.denominator * temp.denominator);
}
public Fraction2 add(Fraction2 sent)
{
   int cmmndenom = sent.denominator * this.denominator;
   int answer = this.numerator * sent.denominator + sent.numerator * this.denominator;
   return new Fraction2(answer, cmmndenom);
}
public Fraction2 divide(Fraction2 sent)
{
    //keep it change it flip it method
    Fraction2 answer = new Fraction2(this.numerator * sent.denominator,
                                     this.denominator * sent.numerator);
    return answer;
}
public Fraction2 reduce()
{
    int ansNumer = numerator;
    int ansDenom = denominator;
    for (int i = 1; ((i <= (numerator)) && i <= (denominator)); i++)
    {
        if (((numerator % i) == 0)  && ((denominator % i) == 0))
        {
            ansNumer = numerator / i;
            ansDenom = denominator / i;
        }
    }
    return new Fraction2(ansNumer, ansDenom);
}

}

Когда я вставляю 1/4 и 2/ 6 и я должен получить 6/8, но я получаю 8/6.Остальные методы работают за исключением разделительной части.Я просто застрял на том, как получить 6/8 вместо 8/6.

import java.util.Scanner;
public class FractionTesterv2
{
    public static void main(String args[])
    {
        System.out.println("\f");
        Scanner input = new Scanner(System.in);
        int numerator;
        int denominator;
        int addCount = 0;
        int multCount = 0;
        int divCount = 0;
        //***************************************
        //Creating future objects
        Fraction2 fraction3 = new Fraction2();
    Fraction2 addAnswer = new Fraction2();
    Fraction2 multAnswer = new Fraction2();
    Fraction2 divAnswer  = new Fraction2();
    //***************************************
    System.out.println("Enter a numerator");
    numerator = input.nextInt();
    System.out.println("Enter a denominator");
    denominator = input.nextInt();
    //creates first fraction
    Fraction2 fraction2 = new Fraction2(numerator, denominator);
    System.out.println("would you like to add another fraction?");
    String choice = input.nextLine();
    choice = input.nextLine();
    // Will only display first fraction entered
    if (choice.equals("no"))
        System.out.println(fraction2);
    else
    {
        while  (!(choice.equals("no")))
        {
            System.out.println("Enter a numerator");
            numerator = input.nextInt();
            System.out.println("Enter a denominator");
            denominator = input.nextInt();
            fraction3 = new Fraction2(numerator, denominator);
            //***************************************
            //Adding Fractions
            if (addCount == 0)
                addAnswer = fraction2;
            addCount = 1;
            addAnswer = fraction3.add(addAnswer);
            System.out.println("add: " + addAnswer);
            //***************************************
            //Multiplying Fractions
            if (multCount == 0)
                 multAnswer = fraction2;
            multCount = 1;
            multAnswer = fraction3.mult(multAnswer);
            System.out.println("Multiply: " + multAnswer);
            //***************************************
            //Dividing Fractions
            if (divCount == 0)
                divAnswer = fraction2;
            divCount = 1;
            divAnswer = fraction3.divide(divAnswer);
            System.out.println("Divide: " + divAnswer);
            //***************************************
            System.out.println("would you like to add another Fraction?");
            choice = input.nextLine();
            choice = input.nextLine();
        }
        Fraction2 addReduced = addAnswer.reduce();
        Fraction2 multReduced = multAnswer.reduce();
        Fraction2 divReduced = divAnswer.reduce();
        System.out.println("Adding Reduced: " + addReduced);
        System.out.println("Multiply Reduced: " + multReduced);
        System.out.println("Dividing Reduced: " + divReduced);
    }            
}

}

Мой код достаточно велик, чтобы начать, и я уверен, что могу понятькак это упростить.Просто ищу помощи с одной стороны.

1 Ответ

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

Первые два числа, которые вы вводите («1», «4»), используются для построения fraction2.

Следующие два числа («2», «6») используются для построенияfraction3.

И затем вы вычисляете:

divAnswer = fraction3.divide(fraction2);

"2/6", деленное на "1/4", равно "8/6" - если вы хотите "6/8«тогда вам нужно будет вычислить« 1/4 », деленное на« 2/6 », что будет

divAnswer = fraction2.divide(fraction3);

Для операций цепного деления вы можете написать

// this shows an extract of a larger fraction of your code!
divAnswer = fraction2;
while  (!(choice.equals("no")))
    //...
    // no need for some strange divCount flag here
    divAnwser = divAnswer.divide(fraction3);
    //...
}

или аналогично тому, что вы делаете сейчас:

while  (!(choice.equals("no")))
    //...
    if (divCount == 0)
        divAnswer = fraction2;
    divCount = 1;
    divAnswer = divAnswer.divide(fraction3);
    //...
}

Основная проблема в том, что в вашем текущем коде поменялись операциями деления, и это то, что я пытался показать.

...