当我运行我的第一轮代码(mult。)时,它可以工作,但如果我再试一次,为第一个提示输入“answer”,它会给我0.为什么?
package gui.calc;
import javax.swing.JOptionPane;
public class GUICalc {
public static double mult(double mult1, double mult2) {
mult1 *= mult2;
return mult1;
}
public static double div(double div1, double div2) {
div1 /= div2;
return div1;
}
public static double add(double add1, double add2) {
add1 += add2;
return add1;
}
public static double sub(double sub1, double sub2) {
sub1 -= sub2;
return sub1;
}
public static void main(String[] args) {
Boolean goAgain = true;
double finalAns = 1;
while (goAgain == true) {
Object[] options = { "*", "/", "+", "-" };
int n = JOptionPane.showOptionDialog(null,
"Choose your operationr",
"this is null", JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE, null, options, options[0]);
String s1 = JOptionPane.showInputDialog(null, "enter nums",
"Enter NUm", JOptionPane.ERROR_MESSAGE);
String s2 = JOptionPane.showInputDialog(null, "enter nums",
"Enter NUm", JOptionPane.ERROR_MESSAGE);
double d1 = 0;
double d2 = 0;
if (s1.equalsIgnoreCase("answer")) {
d1 = finalAns;
}
else if (s2.equalsIgnoreCase("answer")) {
d2 = finalAns;
} else {
d1 = Double.parseDouble(s1);
d2 = Double.parseDouble(s2);
}
if (n == 0) {
double mult1 = mult(d1, d2);
JOptionPane.showConfirmDialog(null, mult1, "dsfa",
JOptionPane.ERROR_MESSAGE);
finalAns = mult1;
} else if (n == 1) {
double div1 = div(d1, d2);
JOptionPane.showConfirmDialog(null, div1, "dsfa",
JOptionPane.ERROR_MESSAGE);
finalAns = div1;
} else if (n == 2) {
double plus1 = add(d1, d2);
JOptionPane.showConfirmDialog(null, plus1, "dsfa",
JOptionPane.ERROR_MESSAGE);
finalAns = plus1;
} else if (n == 3) {
double sub1 = sub(d1, d2);
JOptionPane.showConfirmDialog(null, sub1, "dsfa",
JOptionPane.ERROR_MESSAGE);
finalAns = sub1;
}
JOptionPane.showMessageDialog(null, finalAns, "hi",
JOptionPane.ERROR_MESSAGE);
if (JOptionPane.showConfirmDialog(null, "GO AGAIN?", "daf",
JOptionPane.YES_NO_OPTION) == JOptionPane.NO_OPTION) {
goAgain = false;
}
}
}
}
答案 0 :(得分:1)
问题在于:
double d1 = 0;
double d2 = 0;
if (s1.equalsIgnoreCase("answer")) {
d1 = finalAns;
}
else if (s2.equalsIgnoreCase("answer")) {
d2 = finalAns;
} else {
d1 = Double.parseDouble(s1);
d2 = Double.parseDouble(s2);
}
如果s1
回答,则会执行第一个if
块。这将设置d1 = finalAns
,但d2
将只是0
,因为它是初始化的内容,并且永远不会分配任何其他内容。这就是我认为你打算做的事情:
double d1 = 0;
double d2 = 0;
if (s1.equalsIgnoreCase("answer")) {
d1 = finalAns;
} else {
d1 = Double.parseDouble(s1);
}
if (s2.equalsIgnoreCase("answer")) {
d2 = finalAns;
} else {
d2 = Double.parseDouble(s2);
}