HELP! Displaying Fractions
Author |
Message |
Thanos
|
Posted: Mon Feb 23, 2004 1:48 am Post subject: HELP! Displaying Fractions |
|
|
Hi, I wrote a fraction calculator program and i need help in displaying whole numbers as fraction, but everything else works pretty good. For example, 5/1 + 5/1 would be 10, but i need it to display 10/1 instead of just 10, can someone help me with this please? here is this code.
class file:
code: |
public class Fraction {
private int numerator;
private int denominator;
//get/set methods
public void setNumerator(int num) {
this.numerator = num;
}
public int getNumerator() {
return this.numerator;
}
public void setDenominator(int den) {
this.denominator = den;
}
public int getDenominator() {
return this.denominator;
}
//constructors
public Fraction() {
this.numerator = 4;
this.denominator = 9;
}
public Fraction(int num, int den) {
this.numerator = num;
this.denominator = den;
}
//// static methods
public static Fraction add (Fraction fr1, Fraction fr2) {
int temp;
int rDen, rNum;
rDen = fr1.denominator * fr2.denominator;
rNum = (fr1.numerator*fr2.denominator ) + (fr2.numerator*fr1.denominator);
temp = getGCD (rDen, Math.abs(rNum));
rDen = rDen/temp;
rNum = rNum/temp;
return new Fraction(rNum, rDen);
}
public static Fraction subtract ( Fraction fr1, Fraction fr2) {
int temp;
int rDen, rNum;
rDen = fr1.denominator * fr2.denominator;
rNum = (fr1.numerator*fr2.denominator ) - (fr2.numerator*fr1.denominator);
temp = getGCD (rDen, Math.abs(rNum));
rDen = rDen/temp;
rNum = rNum/temp;
return new Fraction(rNum, rDen);
}
public static Fraction multiply (Fraction fr1, Fraction fr2) {
int rDen, rNum;
int gcd;
rDen = fr1.denominator * fr2.denominator;
rNum = fr1.numerator * fr2.numerator;
gcd = getGCD(rDen, rNum);
return ( new Fraction(rNum/gcd, rDen/gcd) );
}
public static Fraction divide (Fraction fr1, Fraction fr2) {
int rDen, rNum;
int gcd;
rDen = fr1.denominator * fr2.numerator;
rNum = fr1.numerator * fr2.denominator;
gcd = getGCD(rDen, rNum);
return ( new Fraction(rNum/gcd, rDen/gcd) );
}
public static int getGCD (int a, int b) {
if (b == 0)
return a;
return getGCD (b, a % b);
}
public boolean isValid() { return denominator!=0; }
public String toString() {
if (numerator == 0)
return "0";
else if (denominator == 0)
return "Invalid";
else if (denominator == 1)
return ""+numerator;
else
return (numerator + "/" + denominator);
}
}
|
and here's the main program
code: |
import javax.swing.*;
public class FractionCalculator {
public static void main(String arg[]) {
Fraction fr1, fr2;
int option = 0;
boolean exit = false;
fr1 = getFraction(1);
fr2 = getFraction(2);
while (true) {
try {
option = Integer.parseInt(JOptionPane.showInputDialog("Enter Option:\n\nCurrent Fractions:\n" + fr1.toString() +"\n" + fr2.toString() + "\n\n1.add\n2.multiply\n3.subtract\n4.divide\n5.another fractions\n6.exit"));
} catch (NumberFormatException e) { JOptionPane.showMessageDialog (null,"Invalid input", "Error", 2);
}
switch (option) {
case 1: JOptionPane.showMessageDialog (null,Fraction.add(fr1,fr2), "Result", 1);
break;
case 2: JOptionPane.showMessageDialog (null,Fraction.multiply(fr1,fr2), "Result", 1);
break;
case 3: JOptionPane.showMessageDialog (null,Fraction.subtract(fr1,fr2), "Result", 1);
break;
case 4: JOptionPane.showMessageDialog (null,Fraction.divide(fr1,fr2), "Result", 1);
break;
case 5 : fr1 = getFraction(1);
fr2 = getFraction(2);
break;
case 6: exit = true;
}
if (exit)
break;
}
}
public static Fraction getFraction (int num) {
Fraction fr;
while (true) {
fr = new Fraction(getData("Enter numerator for fraction " + num), getData("Enter denominator for fraction " + num));
if (fr.isValid())
return fr;
JOptionPane.showMessageDialog(null, "Invalid Fraction (Denominator cannot be zero)", "Error", 2);
}
}
private static int getData(String msg) {
while (true) {
try {
int f1 = Integer.parseInt(JOptionPane.showInputDialog( msg ));
return f1;
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Invalid input. Must be a number!", "Error", 2);
}
}
}
} |
|
|
|
|
|
![](images/spacer.gif) |
Sponsor Sponsor
![Sponsor Sponsor](templates/subSilver/images/ranks/stars_rank5.gif)
|
|
![](images/spacer.gif) |
da_foz
![](http://www.redclaw.ca/nnnflame2.gif)
|
Posted: Wed Mar 03, 2004 2:20 pm Post subject: (No subject) |
|
|
In your toString method take out the following 2 lines:
// else if (denominator == 1)
// return "" + numerator;
This will force everything to display with a denominator. |
|
|
|
|
![](images/spacer.gif) |
|
|