Looks like the subtract method does not always return. Look at where you have return statements (inside if statements). Look at what those if statements say. Can you think of a time when the fraction might not return? Why would it not return? Hint: the else statement will be handy here. On 11/15/10, Gilbert Neiva <gneiva@xxxxxxx> wrote: > Ok, in my last post I had mensioned that I would add more methods. I added a > subtract method that would subtract two fractions. I get an error when > running the program with J2SDK. When I run the program with Eclipse, it runs > fine, except for the error that it mensions after it has finished running. > Here is my Fraction class. > > public class Fraction > > { > > int numerator; // Holds numerator > > int denominator; // Holds denominator > > // Constructor passes int values from num and denum to numerator, and > denominator. > > public Fraction(int num, int denom) > > { > > numerator = num; > > denominator = denom; > > } > > // Default constructor sets data fields to 0 > > public Fraction() > > { > > numerator = 0; > > denominator = 0; > > } > > // Methods return values of numerator and denominator > > public int getNumerator() { return numerator; } > > public int getDenominator() { return denominator; } > > // Method returns printed formatted string > > public String toString() > > { > > return numerator + "/" + denominator; > > } > > // Method adds two fractions together > > public Fraction add(Fraction frac1) > > { > > Fraction fraction_1 = new Fraction(); > > Fraction fraction_2 = new Fraction(); > > Fraction result = new Fraction(); > > Fraction printResult = new Fraction(); > > fraction_1.denominator = denominator * frac1.denominator; > > fraction_1.numerator = numerator * frac1.denominator; > > fraction_2.denominator = frac1.denominator * denominator; > > fraction_2.numerator = frac1.numerator * denominator; > > result.numerator = fraction_1.numerator + fraction_2.numerator; > > result.denominator = denominator * frac1.denominator; > > printResult = new Fraction(result.numerator, result.denominator); > > return printResult; > > } > > // Method subtracts two fractions > > public Fraction subtract(Fraction frac1) > > { > > Fraction fraction_1 = new Fraction(); > > Fraction fraction_2 = new Fraction(); > > Fraction result = new Fraction(); > > Fraction printResult = new Fraction(); > > fraction_1.denominator = denominator * frac1.denominator; > > fraction_1.numerator = numerator * frac1.denominator; > > fraction_2.denominator = frac1.denominator * denominator; > > fraction_2.numerator = frac1.numerator * denominator; > > result.numerator = fraction_1.numerator - fraction_2.numerator; > > result.denominator = denominator * frac1.denominator; > > > // If both numerator and denominator are negative > > if (result.numerator < 0 && result.denominator < 0) > > { > > printResult = new Fraction(Math.abs(result.numerator), > Math.abs(result.denominator)); > > return printResult; > > } > > if (result.numerator > 0 && result.denominator < 0) > > { > > printResult = new Fraction(result.numerator*-1, > Math.abs(result.denominator)); > > return printResult; > > } > > } > > } // End of class > > > > Here is my source code for the driver class. > > > > import java.util.Scanner; // Import Scanner class > > // Class FractionDriver inputs two fractions and adds and subtracts them > > public class FractionDriver > > { > > public static void main(String[] args) > > { > > // Declare local data fields > > int numerator; // Holds numerator > > int denominator; // Holds denominator > > Scanner inData = new Scanner(System.in); // Scanner object > > Fraction frac1 = new Fraction(); > > Fraction frac2 = new Fraction(); > > Fraction answer = new Fraction(); > > > // Ask user for numerators and denominators. > > System.out.println("Enter numerator for fraction 1:"); > > numerator = inData.nextInt(); > > System.out.println("Enter denominator for fraction 1:"); > > denominator = inData.nextInt(); > > frac1 = new Fraction(numerator, denominator); > > System.out.println("Fraction 1 is " + frac1 + "."); > > System.out.println("Enter numerator for fraction 2:"); > > numerator = inData.nextInt(); > > System.out.println("Enter denominator for fraction 2:"); > > denominator = inData.nextInt(); > > frac2 = new Fraction(numerator, denominator); > > System.out.println("Fraction 2 is " + frac2 + "."); > > answer = frac1.add(frac2); > > System.out.println(frac1 + " + " + frac2 + " = " + > > answer); > > answer = frac2.subtract(frac1); > > System.out.println(frac2 + " - " + frac1 + " = " + > > answer); > > } > > } > > > > When I run the program with Eclipse, this is what I get. > > > > Enter numerator for fraction 1: > > 2 > > Enter denominator for fraction 1: > > 5 > > Fraction 1 is 2/5. > > Enter numerator for fraction 2: > > 3 > > Enter denominator for fraction 2: > > 7 > > Fraction 2 is 3/7. > > 2/5 + 3/7 = 29/35 > > Exception in thread "main" java.lang.Error: Unresolved compilation problem: > > This method must return a result of type Fraction > > > at Fraction.subtract(Fraction.java:49) > > at FractionDriver.main(FractionDriver.java:33) > > > > When I run the program with J2SDK, I get the following. > > > > C:\Users\user\Desktop\COMP268\Practice\Fractions\src>javac *.java > Fraction.java:74: missing return statement > } > ^ > 1 error > C:\Users\user\Desktop\COMP268\Practice\Fractions\src> > > > > What am I doing wrong? > > > > Gilbert Neiva > > > -- Have a great day, Alex (msg sent from GMail website) mehgcap@xxxxxxxxx; http://www.facebook.com/mehgcap __________ View the list's information and change your settings at //www.freelists.org/list/programmingblind