gpt4 book ai didi

java - 如何让 toString 方法正确打印 2 个带分数的结果?

转载 作者:行者123 更新时间:2023-12-02 10:08:52 24 4
gpt4 key购买 nike

我目前正在使用 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());

最佳答案

我建议不要将 wholeNumber 作为 Fraction 类的一部分。相反,我会将其设为 Fraction 本身 (wholeNumber/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);

然后您就可以使用原来的 switch/case 代码。

关于显示我会这样做:

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

例如,如果您的分数8/2

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

注2:

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

关于java - 如何让 toString 方法正确打印 2 个带分数的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55142883/

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