Java Add() 和 Multiply() 方法返回 0/0 和 1/1?

标签 java methods addition fractions multiplication

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

问题是我创建的 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);
    }

} 

最佳答案

您错误地用分子和分母分别为 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 方法中,您将返回一个新的分数,但您也会更改分子分母当前分数。与乘法类似,您需要创建局部变量来存储新的分子和新分母,以避免更改当前的分数

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

将其更改为返回分子!

关于Java Add() 和 Multiply() 方法返回 0/0 和 1/1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22307112/

相关文章:

java - ArrayList.add 方法不起作用

java - 备份 Java?

java - 创建方法和类 (Java)

python - 如何知道一个类的成员是否是一个方法?

java - "implement a wrapper method"是什么意思?

javascript - 使用 Javascript 将 onclick 函数添加到带有 this 参数的 href

java - 当似乎没有必要时将上下文存储在适配器中

java - 如何将 List<Object> 转换为 List<MyClass>

java - 在将 String 转换为一组对象的情况下,最好的 Spring 转换器策略是什么?

keras - 如何将可训练权重张量添加到 Keras 张量?