Я собрал калькулятор дробей. У него есть класс 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