【问题标题】:Java Add() and Multiply() methods returning 0/0 and 1/1?Java Add() 和 Multiply() 方法返回 0/0 和 1/1?
【发布时间】:2014-03-10 17:28:49
【问题描述】:

对于家庭作业,我应该使用以下驱动程序来输出两个输入分数的总和和乘积,既作为分数又作为双精度数。

问题是我创建的 Add() 方法不断返回“0/0 NaN”,而 Multiply() 方法不断返回“1/1 1.0”。我一直在尝试很多不同的东西,但我不知道如何从驱动程序中获取覆盖新分数的方法。

这是我的司机:

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; then denominator."); 
     c = new Fraction(stdIn.nextInt(), stdIn.nextInt()); 
     c.print(); 

     System.out.println("Enter numerator; then denominator."); 
     d = new Fraction(stdIn.nextInt(), stdIn.nextInt()); 
     d.print(); 

     x = new Fraction(); // create a fraction for number 0 

     System.out.println("Sum:"); 
     x.add(c).add(d); 
     x.print(); 
     x.printAsDouble(); 

     x = new Fraction(1, 1); // create a fraction for number 1 

     System.out.println("Product:"); 
     x.multiply(c).multiply(d); 
     x.print(); 
     x.printAsDouble(); 

     System.out.println("Enter numerator; then denominator."); 
     x = new Fraction(stdIn.nextInt(), stdIn.nextInt()); 
     x.printAsDouble(); 

     } // end main 

}  //end 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);
    }

} 

【问题讨论】:

  • getNumerator { return this.denominator}?看看有什么问题吗?

标签: java methods add fractions multiplication


【解决方案1】:

您错误地使用分子和分母 0 来表示值 0。该值 0/0 在数学上是不确定的,将在浮点运算中产生 NaN

尝试一个数学上正确的零,用 0 表示分子,1 表示分母。

// Creates zero.
public Fraction()
{
    this.numerator = 0;  // This line is unnecessary, as default is 0.
    this.denominator = 1;
}

此外,在您的add 方法中,您将返回一个新的Fraction,但同时您也更改了当前Fractionnumeratordenominator。与multiply 一样,您需要创建局部变量来存储新的分子和新的分母,以避免更改当前的Fraction

// Declare them as "int" local variables.
int denominator = this.getDenominator() * c.getDenominator();
int numerator = this.getNumerator() * c.getDenominator() +
               c.getNumerator() * this.getDenominator();

顺便说一句,正如@MarcB 在评论中已经指出的那样,这是错误的:

public int getNumerator()
{
    return this.denominator;
}

更改它以返回分子!

【讨论】:

  • 如果分母为0,也可以抛出异常或打印错误信息。
  • 根据main 中分数的使用方式,我认为应该更改实例变量,add 和乘法应该返回this
猜你喜欢
  • 2018-10-15
  • 2016-09-02
  • 2017-11-28
  • 2011-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-05
相关资源
最近更新 更多