【问题标题】:Need help fixing this piece of code需要帮助修复这段代码
【发布时间】:2011-11-26 00:13:48
【问题描述】:
public class Number {
private int numerator;
private int denominator;

public Number(int numerator, int denominator) {
    this.numerator = numerator;
    this.denominator = denominator;
}

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

public int getDenominator() {
    return denominator;
}

public int getNumerator() { 
    return numerator;
}

public String toString() {
    if (numerator == 0) {
        return "0";
    } else if (denominator == 1) {
        return denominator + "";
    }
    return numerator + "/" + denominator;
}

public Number subtract(Number other) {
    numerator = (this.getNumerator() * other.getDenominator()) - (other.getNumerator() * this.getDenominator());
    denominator = this.getDenominator() * other.getDenominator();

    return this;
}

////
public class test {
public static void main(String[] args) {
    Number n1 = new Number(1, 2);
    Number n2 = new Number(3, 5);
    Number n4 = new Number(7, 40);
    Number test = n2.subtract(n1);
    System.out.println(test);
    Number test2 = n4.subtract(n1);
    System.out.println(test2);
    Number test3 = n1.subtract(n4);
    System.out.println(test3);
    Number test4 = n2.subtract(n1);
    System.out.println(test4);

}
}

我在使用 Number minus() 方法时遇到问题。当我从客户端调用它时,它有时会起作用,但经过几次连续调用后,我得到了意想不到的输出。前两个电话工作正常,然后我开始得到很差的结果。我知道我在 subtract() 方法中遗漏了一些东西,只是不确定它是什么。

任何帮助将不胜感激。

【问题讨论】:

  • 当你减去分数时,你不会减去分母。此外,您还需要公分母来执行减法。
  • 请编辑您的标题以使其更具信息性。
  • 用一个例子来说明 user1060350 的答案:2/2(又名 1)-1/1(又名 1)是否等于 1/1(又一个)?还是 1 - 1 = 0?
  • 我更新了代码以反映不正确的数学,但我仍然遇到与以前相同的问题。

标签: java


【解决方案1】:

如果对对象使用减法,请将最后一行更改为return this。 顺便说一句,您对比率类型的减法是错误的。

【讨论】:

  • 大声笑,是的,我并没有真正停下来思考共同点。
  • 我更新了我的代码以反映正确的数学,但是在多次调用该方法后我仍然遇到问题。有什么建议吗?
  • 您的程序运行良好,除非您没有减少分数(例如 -26/80 = -13/40)
  • 是的,对于这个程序的初始部分,我不需要这样做。我弄清楚了为什么我会出现奇怪的行为......在减法方法中,我需要创建两个新变量,即 numerator1 并将它们传递回 Number 方法。我最终解决了我自己的问题。感谢您的帮助!
【解决方案2】:

我最终解决了自己的问题,但我感谢大家的帮助。我知道这可能不是解决这个问题的最有效方法,但我只是 CS 一年级的学生。如果有人对清理此代码有任何建议,我很想听听。谢谢!

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

public Number(int numerator, int denominator) {
    reduce(numerator, denominator);
}

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

public int getDenominator() {
    return denominator;
}

public int getNumerator() { 
    return numerator;
}

public String toString() {
    if (numerator == 0) {
        return "0";
    } else if (denominator == 1) {
        return numerator + "";
    }
    return numerator + "/" + denominator;
}

public Number add(RationalNumber other) {
    int numerator1 = (numerator * other.getDenominator()) + (other.getNumerator() * denominator);
    int denominator1 = denominator * other.getDenominator();

    return new Number(numerator1, denominator1);
}

public Number subtract(RationalNumber other) {
    int numerator1 = (numerator * other.getDenominator()) - (other.getNumerator() * denominator);
    int denominator1 = denominator * other.getDenominator();

    return new Number(numerator1, denominator1);
}

public Number multiply(RationalNumber other) {
    int numerator1 = numerator * other.getNumerator();
    int denominator1 = denominator * other.getDenominator();

    return new Number(numerator1, denominator1);
}

public Number divide(RationalNumber other) {
    int numerator1 = numerator * other.getDenominator();
    int denominator1 = denominator * other.getNumerator();

    return new Number(numerator1, denominator1);
}   

private void reduce(int numerator, int denominator) {
    int factor = 1;
    int temp = 0;
    if (Math.abs(numerator) > Math.abs(denominator)) {
        temp = Math.abs(numerator);
    } else if (Math.abs(denominator) > Math.abs(numerator)) {
        temp = Math.abs(denominator);
    }
    for (int i = temp; i > 0; i --) {
        if ((numerator %i == 0) && (denominator %i == 0)) {
            factor = i;
            i = 0;
        }
    }
    numerator = numerator / factor;
    denominator = denominator / factor;
    rightForm(numerator, denominator);
}
private void rightForm(int numerator, int denominator) {
    if (numerator > 0 && denominator < 0) {
        this.numerator = numerator - numerator - numerator;
        this.denominator = Math.abs(denominator);
    } else if (numerator < 0 && denominator < 0) {
        this.numerator = Math.abs(numerator);
        this.denominator = Math.abs(denominator);
    } else {
        this.numerator = numerator;
        this.denominator = denominator;
    }
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多