Fraction.java程序没有重载,返回奇怪的数字

时间:2013-12-09 00:03:46

标签: java

首先,我的主程序正在调用Fraction.java,为了这个提交,请假设“Fraction1”的所有实例实际上都是“分数”

import java.util.Scanner;

public class JursekGregWeek7
{

    public static void main(String[] args)
    {
    Scanner stdIn = new Scanner(System.in);
    Fraction1 c, d, x; // Fraction objects

    System.out.println("Enter numerator; then denominator.");
    c = new Fraction1(stdIn.nextInt(), stdIn.nextInt());
    c.printIt();

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

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

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

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

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

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


    } // end main
}    

以下是Fraction.java,添加了println以确定值是否在给定点。

public class Fraction
{
    private int numerator;
    private int denominator;

    public Fraction()
    {    
        this.numerator = 1;
        this.denominator = 1;
    }   

    public Fraction(int n, int r)
    {
        this.numerator = n;
        this.denominator = r;
    }

    public Fraction add(Fraction f)
    {

        System.out.println(this.numerator + "banana");
        System.out.println(this.numerator + "asdfasdf");


        this.numerator = this.numerator * f.denominator + f.numerator * this.denominator;
        this.denominator = this.denominator * f.denominator;

        System.out.println(this.numerator + "this.numerator");
        System.out.println(this.denominator + "this.denominator");
        System.out.println(f.numerator + "f.numerator");
        System.out.println(f.denominator + "f.denominator");


        return this;
    }

    public Fraction multiply(Fraction f)   
    {
        this.numerator = this.numerator * f.numerator;
        this.denominator = this.denominator * f.denominator;   
        return this;
    }

    public void printIt()
    {
        System.out.println(this.numerator + "/" + this.denominator);
    }

    public void printAsDouble()
    {
        double d;
        d = (1.0 * this.numerator / this.denominator);
        System.out.println(d);
    }


}

问题似乎围绕公共Fraction(),公共分数(int n,int r)和公共分数加(分数f)

非常感谢任何建议/帮助。

1 个答案:

答案 0 :(得分:0)

1)你搞砸了。

    this.numerator = this.numerator * f.denominator + f.numerator * this.denominator;
    this.denominator = this.denominator * f.denominator;

使用一些临时局部变量(参见下面的代码)。

2) 这也不是零,因为你的评论说:)

public Fraction()
{    
    this.numerator = 1;
    this.denominator = 1;
}   

所以这些是唯一需要的两个小修补程序。

以下是您修复的代码,但请多考虑一下 (即想想为什么这些修正使其有效)。

public class Fraction
{
    private int numerator;
    private int denominator;

    public Fraction()
    {    
        this.numerator = 0;
        this.denominator = 1;
    }   

    public Fraction(int n, int r)
    {
        this.numerator = n;
        this.denominator = r;
    }

    public Fraction add(Fraction f)
    {

        // System.out.println(this.numerator);
        // System.out.println(this.numerator);

        int n = this.numerator;
        int d = this.denominator;

        this.numerator = n * f.denominator + f.numerator * d;
        this.denominator = d * f.denominator;

        // System.out.println(this.numerator + " : this.numerator");
        // System.out.println(this.denominator + " : this.denominator");
        // System.out.println(f.numerator + " : f.numerator");
        // System.out.println(f.denominator + " : f.denominator");

        return this;
    }

    public Fraction multiply(Fraction f)   
    {
        this.numerator = this.numerator * f.numerator;
        this.denominator = this.denominator * f.denominator;   
        return this;
    }

    public void printIt()
    {
        System.out.println(this.numerator + "/" + this.denominator);
    }

    public void printAsDouble()
    {
        double d;
        d = (1.0 * this.numerator / this.denominator);
        System.out.println(d);
    }


}

TEST:

Enter numerator; then denominator.
1
5
1/5
Enter numerator; then denominator.
1
6
1/6
Sum:
11/30
0.36666666666666664
Product:
1/30
0.03333333333333333
Enter numerator; then denominator.
4
12
0.3333333333333333
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8