Re: Java problem

  • From: Alex Hall <mehgcap@xxxxxxxxx>
  • To: programmingblind@xxxxxxxxxxxxx
  • Date: Mon, 15 Nov 2010 13:46:22 -0500

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

Other related posts: