Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Eric Liu
- * Mr. Peterson
- * APCS Period 3
- * 15 December 2017
- */
- public class Fraction {
- private int denominator;
- private int numerator;
- public Fraction() {
- numerator = 1;
- denominator = 0;
- }
- public Fraction(String input) {
- int slash = 0;
- int neg = 1;
- String blah = "+-";
- if(input.charAt(0) == blah.charAt(0) ||input.charAt(0) == blah.charAt(1)) {
- if(input.charAt(0) == blah.charAt(1)) {
- neg = -1;
- }
- input = input.substring(1);
- }
- for(int i = 0; i <= input.length() - 1; i++) {
- if(input.charAt(i) == '/') {
- break;
- }
- slash++;
- }
- numerator = Integer.parseInt(input.substring(0, slash));
- denominator = Integer.parseInt(input.substring(slash + 1));
- numerator *= neg;
- reduce();
- }
- public Fraction(int num) {
- numerator = num;
- denominator = 1;
- }
- public Fraction(int num, int denom) {
- numerator = (denom < 0 ? -num : num);
- if(denominator == 0) {
- }
- denominator = (denom < 0 ? -denom : denom);
- reduce();
- }
- public void setNumerator(int num) {
- numerator = num;
- reduce();
- }
- public int getNumerator() {
- return numerator;
- }
- public void setDenominator(int denom) {
- if(denom > 0) {
- denominator = denom;
- reduce();
- }
- else if(denom < 0) {
- numerator = -numerator;
- denominator = -denom;
- reduce();
- }
- }
- public int getDenominator() {
- return denominator;
- }
- public Fraction add(Fraction f) {
- f.reduce();
- Fraction sum = new Fraction();
- sum.denominator = denominator * f.denominator;
- sum.numerator = (numerator * f.denominator + denominator * f.numerator);
- sum.reduce();
- return sum;
- }
- public Fraction subtract(Fraction f) {
- f.reduce();
- Fraction result = new Fraction();
- result.numerator = numerator * f.denominator - f.numerator * denominator;
- result.denominator = denominator * f.denominator;
- result.reduce();
- return result;
- }
- public Fraction multiply(Fraction f) {
- f.reduce();
- Fraction result = new Fraction();
- result.numerator = numerator * f.numerator;
- result.denominator = denominator * f.denominator;
- result.reduce();
- return result;
- }
- public Fraction divide(Fraction f) {
- f.reduce();
- Fraction result = new Fraction();
- if(f.numerator == 0) {
- throw new IllegalArgumentException("Cannot divide by 0");
- }
- result.numerator = numerator * f.denominator;
- result.denominator = denominator * f.numerator;
- result.reduce();
- if(result.denominator < 0 && result.numerator < 0) {
- result.denominator *= -1;
- result.numerator *= -1;
- }
- return result;
- }
- public String toString() {
- if(numerator == 0) {
- return "0";
- }
- else if(denominator == 1) {
- return "" + numerator;
- }
- return numerator + "/" + denominator;
- }
- public String toMixedNumberString() {
- int wholeNum = 0;
- if(numerator > denominator) {
- wholeNum = numerator / denominator;
- numerator -= denominator * wholeNum;
- if(numerator == 0) {
- return "" + wholeNum;
- }
- return "" + wholeNum + "_" + numerator + "/" + denominator;
- }
- else if((numerator*-1) > denominator && numerator < 0) {
- numerator *= -1;
- if(denominator < 0) {
- denominator *= -1;
- }
- wholeNum = numerator / denominator;
- numerator -= denominator * wholeNum;
- if(numerator == 0) {
- return "-" + wholeNum;
- }
- return "-" + wholeNum + "_" + numerator + "/" + denominator;
- }
- if(denominator == 1)return numerator + "";
- return numerator + "/" + denominator;
- }
- public int compareTo(Fraction f) {
- int n = numerator * f.denominator;
- int newn = f.numerator * denominator;
- return n - newn;
- }
- private void reduce() {
- int n = numerator, d = denominator, largest;
- if(numerator < 0) {
- n = -numerator;
- }
- if(n > d) {
- largest = n;
- }
- else {
- largest = d;
- }
- int gcd = 0;
- for(int i = largest; i >= 2; i--) {
- if(numerator % i == 0 && denominator % i == 0) {
- gcd = i;
- break;
- }
- }
- if(gcd != 0) {
- numerator /= gcd;
- denominator /= gcd;
- }
- if(denominator < 0){
- denominator *= -1;
- numerator *= -1;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement