如何使用toString方法正确打印出2个混合分数的结果?

时间:2019-03-13 13:20:22

标签: java string swing

我目前正在使用java swing创建一个简单的分数计算器,但是一旦添加了混合数字选项,我现在就停留在显示结果上。 现在,已执行的程序如下所示:

Program when running

这是我在toString方法上尝试过的方法:

public String toString() {
    if (this.numerator >= this.denominator) {
        String returnString = String.valueOf((this.numerator / this.denominator)+this.wholeNumber);
        int modulo = ((this.numerator % this.denominator)+wholeNumber);
        if (modulo > 0) {
            returnString += " " + modulo + "/" + this.denominator;
        }
        return returnString;
    }
    return this.numerator + "/" + this.denominator;
}

这是计算每个运算符结果的代码段

 public void actionPerformed(ActionEvent e) {
    if (e.getSource() == this.computeButton){
        try {
            Fraction f1 = new Fraction(Integer.parseInt(Num1.getText()), Integer.parseInt(Den1.getText()));
            Fraction f2 = new Fraction(Integer.parseInt(Num2.getText()), Integer.parseInt(Den2.getText()));
            Fraction res;
            if (!Mixed1.getText().isEmpty())
                f1.setWholeNumber(Integer.parseInt(Mixed1.getText()));
            if (!Mixed2.getText().isEmpty()){
                f2.setWholeNumber(Integer.parseInt(Mixed2.getText()));
            }

            switch (comboBox1.getSelectedIndex()){
                case 0: //addition
                    res =f1.add(f2);
                    break;
                case 1://subtraction
                    res = f1.sub(f2);
                    break;
                case 2://multiplication
                    res = f1.mul(f2);
                    break;
                case 3://division
                    res = f1.div(f2);
                    break;

                default: res = new Fraction(1,1);
            }
            Label.setText(res.toString());

2 个答案:

答案 0 :(得分:1)

我建议不要将您的wholeNumber作为您的Fraction课程的一部分。 相反,我自己将其设置为FractionwholeNumber/1):

Fraction mixed1 = new Fraction(Integer.parseInt(Mixed1.getText()), 1);
Fraction fraction1 = new Fraction(Integer.parseInt(Num1.getText()), Integer.parseInt(Den1.getText()));

Fraction mixed2 = new Fraction(Integer.parseInt(Mixed2.getText()), 1);
Fraction fraction2 = new Fraction(Integer.parseInt(Num2.getText()), Integer.parseInt(Den2.getText()));

那么您只有分数,可以将它们相乘

Fraction f1 = fraction1.mul(mixed1);
Fraction f2 = fraction2.mul(mixed2);

然后您就可以使用原始的开关/案例代码了。

关于显示,我会这样:

public String getResult() {
    String returnString = this.numerator + "/" + this.denominator;
    if (this.numerator >= this.denominator) {
        int modulo = this.numerator % this.denominator;
        if(modulo == 0) {
            int divider = this.numerator / this.denominator;
            returnString = String.valueOf(divider);
        }
    }
    return returnString;
}

输出

Fraction(10, 2) -> 5
Fraction(9, 3) -> 3
Fraction(8, 3) -> 8/3
Fraction(5, 2) -> 5/2

注意1:

如Stultuske在评论中所述,您可能不应该使用toString,因为它是从Object继承的方法

但是您仍然可以用这种方式覆盖它:

@Override
public String toString() {
    return this.numerator  + "/" + this.denominator;
}

例如,如果您的Fraction8/2

toString() returns `8/2` 
getResultAsString() returns `2 * 5/4`

注2:

不要以大写字母开头变量名,例如:mixed1,而不是Mixed1

答案 1 :(得分:0)

我将尝试通过两种方式回答您:

  1. 关于结果:2/2 + 3/2 = 5/2,而不是0。

在创建用于在switchsumsubdivmul)上获取结果的每种方法上,尝试将整个整数相乘数字和分子,例如:

this.numerator=*wholeNumber

  1. 关于结果显示方式: 正如Stultuske在评论中所说,请尝试使用get方法而不是toString