Почему мой калькулятор умножает мои ответы на 3/3? - PullRequest
0 голосов
/ 26 мая 2020

Я собрал калькулятор дробей. У него есть класс Fraction с объектами Fraction, состоящими из числителя int и знаменателя int. Я сделал кучу методов, которые складывают, вычитают и т. Д. c 2 дроби, и все они отлично работают сами по себе. Однако после того, как я внес некоторые изменения во входные данные, он по-прежнему дает мне правильный ответ, но он умножает окончательный ответ на 3/3. Вот основной класс:

    public class Main {

    public static int parseNum(String str) {
        Pattern pattern = Pattern.compile("/ *");
        Matcher matcher = pattern.matcher(str);
        if (matcher.find()) {
            String string1 = str.substring(0, matcher.start());
            int num1 = Integer.parseInt(string1);
            return num1;
        } else {
            return -1;
        }
    }

    public static int parseDem(String str) {
        Pattern pattern = Pattern.compile("/ *");
        Matcher matcher = pattern.matcher(str);
        if (matcher.find()) {
            String string2 = str.substring(matcher.end());
            int dem1 = Integer.parseInt(string2);
            return dem1;
        } else {
            return -1;
        }
    }


    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        System.out.println("Do you want to add, subtract, multiply, or divide?");
        String operator = in.next();
        System.out.println("Input fraction 1:");
        String str = in.next();


        System.out.println("Input fraction 2:");
        String str1 = in.next();

        Fraction first = new Fraction(parseNum(str), parseDem(str));
        Fraction second = new Fraction(parseNum(str1), parseDem(str1));

        if (operator.equals("add")) {
            first.add(second);
            System.out.println(first);
        } else if (operator.equals("subtract")) {
            first.subtract(second);
            System.out.println(first);
        } else if (operator.equals("multiply")) {
            first.multiply(second);
            System.out.println(first);
        } else if (operator.equals("divide")) {
            first.divide(second);
            System.out.println(first);
        }

    }
}

Вот класс Fraction:

public class Fraction {
    private int numerator;
    private int denominator;

    public Fraction(int numerator1, int denominator1){
        numerator = numerator1;
        denominator = denominator1;
    }

    public int getNumerator() {
        return numerator;
    }

    public int getDenominator() {
        return denominator;
    }

    public void add(Fraction other) {
        int newNumerator = (numerator * other.getDenominator()) + (denominator * other.getNumerator());
        numerator = newNumerator;
        int newDenominator = denominator * other.getDenominator();
        denominator = newDenominator;
    }

    public void subtract(Fraction other) {
        int newNumerator = (numerator * other.getDenominator()) - (denominator * other.getNumerator());
        numerator = newNumerator;
        int newDenominator = denominator * other.getDenominator();
        denominator = newDenominator;
    }

    public void multiply(Fraction other) {
        int newNumerator = numerator * other.getNumerator();
        numerator = newNumerator;
        int newDenominator = denominator * other.getDenominator();
        denominator = newDenominator;
    }

    public void divide(Fraction other) {
        int newNumerator = numerator * other.getDenominator();
        numerator = newNumerator;
        int newDenominator = denominator * other.getNumerator();
        denominator = newDenominator;
    }
    @Override
    public String toString(){
        return numerator + "/" + denominator;
    }
}

Кроме того, я знаю, что это не очень эффективно, я работаю над этим. Просто интересуюсь делом 3/3 на данный момент. Кроме того, я знаю, что это не меняет ответа. Я просто имею в виду, например, что 2/3 становится 6/9

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