here is the driver:
import javax.swing.*; import java.util.*; import java.io.*; import java.awt.*; import java.awt.event.*; import java.lang.String.*; public class testRational extends Rational{ public static void main(String[] args){ String input2 = "", input = "", temp = ""; int num1 = 0, den1 = 0, den2 = 0, num2 = 0, counter = 0, input3 = 0; int[] array = new int[4]; String[] inArr = null; while(input.compareTo("ZZ") != 0){ input = JOptionPane.showInputDialog("What would you like to do?:\n\n\nA. Input from file\nB. Or input from Keyboard \n\n\n(ZZ. to exit)"); input = input.toUpperCase(); if(input.compareTo("A") == 0){ input2 = JOptionPane.showInputDialog("Please enter the file you would like to use for input,\n including the directory and the .txt file extension:\n"); try{ BufferedReader in = new BufferedReader(new FileReader(input)); String inputLine = null; while ((inputLine = in.readLine())!=null) { inArr = inputLine.split(","); for(int i = 0; i <inArr.length; i++){ System.out.println(inArr[i]); } // StringTokenizer tok = new StringTokenizer(inputLine); // tok.nextToken(); // temp = tok.nextToken(); // num1 = Integer.parseInt(temp.trim()); // tok.nextToken(); // temp = tok.nextToken(); // den1 = Integer.parseInt(temp.trim()); // tok.nextToken(); // tok.nextToken(); // temp = tok.nextToken(); // num2 = Integer.parseInt(temp.trim()); // tok.nextToken(); // temp = tok.nextToken(); // den2 = Integer.parseInt(temp.trim()); // tok.nextToken(); // // array[0] = num1; // array[1] = den1; // array[2] = num2; // array[3] = den2; } } catch(IOException e){ } input = JOptionPane.showInputDialog("What would you like to do?:\n\n\nA. Input from file\nB. Or input from Keyboard \nC. Add 2 Rationals (From Keyboard input)\nD. Add 2 Rationals at a time from the array(From File input)\nE. Sub 2 Rationals (From Keyboard input) \nF. Sub 2 Rationals at a time from the array(From File input) \nG. Mul 2 Rationals (From Keyboard input) \nH. Mul 2 Rationals at a time from the array(From File input)\nI. Div 2 Rationals (From Keyboard input)\nJ. Div 2 Rationals at a time from the array(From File input)\n\n(ZZ. to exit)"); input = input.toUpperCase(); if((input.compareTo("D"))==0){ } if((input.compareTo("F"))==0){ } if((input.compareTo("H"))==0){ } } if(input.compareTo("B") == 0){ for(int i = 0; i < array.length; i++){ input3 = Integer.parseInt(JOptionPane.showInputDialog("Please enter a(n) fraction on integer at a time" )); array[i] = input3; } input = JOptionPane.showInputDialog("What would you like to do?:\n\n\n C. Add 2 Rationals (From Keyboard input)\nE. Sub 2 Rationals (From Keyboard input) \nG. Mul 2 Rationals (From Keyboard input) \nI. Div 2 Rationals (From Keyboard input)\n\n(ZZ. to exit)"); input = input.toUpperCase(); if((input.compareTo("C"))==0){ add(array[0], array[1], array[2], array[3]); } if((input.compareTo("E"))==0){ subtract(array[0], array[1], array[2], array[3]); } if((input.compareTo("G"))==0){ multiply(array[0], array[1], array[2], array[3]); } if((input.compareTo("I"))==0){ divide(array[0], array[1], array[2], array[3]); } } } } }
here is the skeleton program:
//******************************************************************** // Rational.java // // Represents one rational number with a numerator and denominator. //******************************************************************** public class Rational { private static int numerator, denominator, temp; public Rational() { numerator = 0; denominator = 0; } //----------------------------------------------------------------- // Sets up the rational number by ensuring a nonzero denominator // and making only the numerator signed. //----------------------------------------------------------------- public Rational(int newNum, int newDen) { numerator = newNum; denominator = newDen; } //----------------------------------------------------------------- // Returns the numerator of this rational number. //----------------------------------------------------------------- public int getNumerator () { return numerator; } //----------------------------------------------------------------- // Returns the denominator of this rational number. //----------------------------------------------------------------- public int getDenominator () { return denominator; } //----------------------------------------------------------------- // Returns the reciprocal of this rational number. //----------------------------------------------------------------- public Rational reciprocal (int n, int d) { temp = n; n = d; d = temp; return reciprocal(n, d); } //----------------------------------------------------------------- // Adds this rational number to the one passed as a parameter. // A common denominator is found by multiplying the individual // denominators. //----------------------------------------------------------------- public Rational add(Rational op2) { int num2; int den2; int currentNum; int currentDen; num2=op2.getNumerator(); den2=op2.getDenominator(); currentNum = getNumerator(); currentDen = getDenominator(); currentNum *= den2; currentDen *= den2; num2 *= denominator; currentNum += num2; Rational ration = new Rational(currentNum, currentDen); return ration; } //----------------------------------------------------------------- // Adds this rational number to the integer passed as a parameter. //----------------------------------------------------------------- public Rational add(int a) { int num2; int den2; int currentNum; int currentDen; num2=a; den2=1; currentNum = getNumerator(); currentDen = getDenominator(); currentNum *= den2; currentDen *= den2; num2 *= denominator; currentNum += num2; Rational ration = new Rational(currentNum, currentDen); return ration; } //----------------------------------------------------------------- // Subtracts the rational number passed as a parameter from this // rational number. //----------------------------------------------------------------- public Rational subtract (Rational op2) { int num2; int den2; int currentNum; int currentDen; num2=op2.getNumerator(); den2=op2.getDenominator(); currentNum = getNumerator(); currentDen = getDenominator(); currentNum *= den2; currentDen *= den2; num2 *= denominator; currentNum -= num2; Rational ration = new Rational(currentNum, currentDen); return ration; } //----------------------------------------------------------------- // Multiplies this rational number by the one passed as a // parameter. //----------------------------------------------------------------- public Rational multiply (Rational op2) { int num2; int den2; int currentNum; int currentDen; num2=op2.getNumerator(); den2=op2.getDenominator(); currentNum = getNumerator(); currentDen = getDenominator(); currentNum *= num2; currentDen *= den2; Rational ration = new Rational(currentNum, currentDen); return ration; } //----------------------------------------------------------------- // Divides this rational number by the one passed as a parameter // by multiplying by the reciprocal of the second rational. //----------------------------------------------------------------- public Rational divide (Rational op2) { int num2; int den2; int currentNum; int currentDen; num2=op2.getNumerator(); den2=op2.getDenominator(); currentNum = getDenominator(); currentDen = getNumerator(); currentNum *= num2; currentDen *= den2; Rational ration = new Rational(currentNum, currentDen); return ration; } //----------------------------------------------------------------- // Determines if this rational number is equal to the one passed // as a parameter. Assumes they are both reduced. //----------------------------------------------------------------- public boolean equals (Rational op2) { int num2; int den2; int currentNum; int currentDen; num2=op2.getNumerator(); den2=op2.getDenominator(); currentNum = getDenominator(); currentDen = getNumerator(); if(currentNum == num2 && currentDen == den2){ return true; } else{ return false; } } //----------------------------------------------------------------- // Returns this rational number as a string. //----------------------------------------------------------------- /* public String toString () { return; } */ //----------------------------------------------------------------- // Reduces this rational number by dividing both the numerator // and the denominator by their greatest common divisor. //----------------------------------------------------------------- private void reduce () { for(int count = denominator; count > 0; count--) { if (numerator % count == 0 && denominator % count == 0) { numerator /= count; denominator /= count; } } } //----------------------------------------------------------------- // Computes and returns the greatest common divisor of the two // positive parameters. Uses Euclid's algorithm. //----------------------------------------------------------------- private int gcd (int num1, int num2) { while (num1 != num2) if (num1 > num2) num1 = num1 - num2; else num2 = num2 - num1; return num1; } //----------------------------------------------------------------- // Displays the Rational Number //----------------------------------------------------------------- public void show() { System.out.println("numerator = " + this.numerator + " denominator = " + this.denominator); } //----------------------------------------------------------------- // Displays the Rational Number in real form also //----------------------------------------------------------------- public void display() { } public static int add(int num, int den, int num2, int den2){ System.out.println("("+num +"/" + den+")" + "+" + "("+ num2 + "/" + den2 +")"); if(den == den2){ num+=num2; } if(den != den2){ num *=den2; den *= den2; num2 *= den; num += num2; } reduce(num, den); return 0; } public static int subtract(int num, int den, int num2, int den2){ System.out.println("("+num +"/" + den+")" + "-" + "("+ num2 + "/" + den2 +")"); if(den == den2){ num-=num2; } if(den != den2){ num *=den2; den *= den2; num2 *= den; num -= num2; } reduce(num, den); return 0; } public static int multiply(int num, int den, int num2, int den2){ System.out.println("("+num +"/" + den+")" + "*" + "("+ num2 + "/" + den2 +")"); num *=num2; den *= den2; reduce(num, den); return 0; } public static int divide(int num, int den, int num2, int den2){ System.out.println("("+num +"/" + den+")" + "/" + "("+ num2 + "/" + den2 +")"); temp = num2; num2 = den2; den2 =temp; num *= num2; den *= den2; reduce(num, den); return 0; } public static void reduce(int num, int den){ for(int count = den; count > 0; count--) { if (num % count == 0 && den % count == 0) { num /= count; den /= count; } } if(den == 1){ System.out.println(num); } else if(den !=1){ System.out.println(num +"/" + den); } } }