Java Add() and Multiply() methods returning 0/0 and 1/1? -
for homework i'm supposed use following driver output sum , product of 2 input fractions, both fraction , double.
the problem add() method created keeps returning "0/0 nan" , multiply() method keeps returning "1/1 1.0". i've been trying lot of different things can't figure out how methods overwrite new fractions driver.
here driver:
import java.util.scanner; public class fractiondriver { /** * @param args */ public static void main(string[] args) { scanner stdin = new scanner(system.in); fraction c, d, x; // fraction objects system.out.println("enter numerator; denominator."); c = new fraction(stdin.nextint(), stdin.nextint()); c.print(); system.out.println("enter numerator; denominator."); d = new fraction(stdin.nextint(), stdin.nextint()); d.print(); x = new fraction(); // create fraction number 0 system.out.println("sum:"); x.add(c).add(d); x.print(); x.printasdouble(); x = new fraction(1, 1); // create fraction number 1 system.out.println("product:"); x.multiply(c).multiply(d); x.print(); x.printasdouble(); system.out.println("enter numerator; denominator."); x = new fraction(stdin.nextint(), stdin.nextint()); x.printasdouble(); } // end main } //end class here fraction class:
package ch6; public class fraction { private int numerator; private int denominator; //************************************************************* public fraction() { } //************************************************************* public fraction(int numerator, int denominator) { this.numerator = numerator; this.denominator = denominator; } //************************************************************** public int getnumerator() { return this.denominator; } //************************************************************** public int getdenominator() { return this.denominator; } //************************************************************** public fraction add(fraction c) { denominator = this.getdenominator() * c.getdenominator(); numerator = this.getnumerator() * c.getdenominator() + c.getnumerator() * this.getdenominator(); return new fraction (numerator, denominator); } //************************************************************** public fraction multiply(fraction c) { int productnumerator = this.numerator * c.numerator; int productdenominator = this.denominator * c.denominator; return new fraction(productnumerator, productdenominator); } //************************************************************** public void print() { system.out.println(this.numerator + "/" + this.denominator); } //************************************************************** public void printasdouble() { system.out.println((double) this.numerator / this.denominator); } }
you incorrectly representing value 0 numerator , denominator of 0 each. value, 0/0, indeterminate in math , produce nan in floating-point operations.
try mathematically correct zero, represented 0 numerator , 1 denominator.
// creates zero. public fraction() { this.numerator = 0; // line unnecessary, default 0. this.denominator = 1; } additionally, in add method, returning new fraction, changing numerator , denominator of current fraction. multiply, you'll want create local variables store new numerator , new denominator, avoid changing current fraction.
// declare them "int" local variables. int denominator = this.getdenominator() * c.getdenominator(); int numerator = this.getnumerator() * c.getdenominator() + c.getnumerator() * this.getdenominator(); incidentally, @marcb stated in comment, wrong:
public int getnumerator() { return this.denominator; } change return numerator!
Comments
Post a Comment