我目前正在使用java swing创建一个简单的分数计算器,但是一旦添加了混合数字选项,我现在就停留在显示结果上。 现在,已执行的程序如下所示:
这是我在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());
答案 0 :(得分:1)
我建议不要将您的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);
然后您就可以使用原始的开关/案例代码了。
关于显示,我会这样:
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;
}
例如,如果您的Fraction
是8/2
toString() returns `8/2`
getResultAsString() returns `2 * 5/4`
注2:
不要以大写字母开头变量名,例如:mixed1
,而不是Mixed1
答案 1 :(得分:0)
我将尝试通过两种方式回答您:
在创建用于在switch
(sum
,sub
,div
和mul
)上获取结果的每种方法上,尝试将整个整数相乘数字和分子,例如:
this.numerator=*wholeNumber
get
方法而不是toString