gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:18:04 25 4
gpt4 key购买 nike

对于家庭作业,我应该使用以下驱动程序来输出两个输入分数的总和和乘积,既作为分数又作为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com