If statement Java-程序输出和else语句是没有原因的吗?

If statement Java-程序输出和else语句是没有原因的吗?,if-statement,If Statement,我有一个非常简单的二次公式代码,我不久前写的,现在回到了。它运行良好,但它输出我的最终else语句,即使它不应该 import javax.swing.JOptionPane; public class quadFormGUI { public void quadForm(){ String aNumI = JOptionPane.showInputDialog("What is your 'A' variable?"); String bNumI = JOptionPane

我有一个非常简单的二次公式代码,我不久前写的,现在回到了。它运行良好,但它输出我的最终else语句,即使它不应该

import javax.swing.JOptionPane;

public class quadFormGUI {
public void quadForm(){

    String aNumI = JOptionPane.showInputDialog("What is your 'A' variable?");
    String bNumI = JOptionPane.showInputDialog("What is your 'B' variable?");
    String cNumI = JOptionPane.showInputDialog("What is your 'C' variable?");

    double aNum = Double.parseDouble(aNumI);
    double bNum = Double.parseDouble(bNumI);
    double cNum = Double.parseDouble(cNumI);

    double oneAns = (bNum * bNum) + (-aNum * cNum * 4);
    if (oneAns < 0){
        JOptionPane.showMessageDialog(null,"The equation does not have a solution", "Quadratic Formula" , JOptionPane.PLAIN_MESSAGE);
    }else{
        double twoAns = (double) Math.sqrt(oneAns);
        double threeAns = -bNum + twoAns;
        double xOne = threeAns/(2*aNum);

        double fourAns = (bNum * bNum) + (-aNum * cNum * 4);
        double fiveAns = (double) Math.sqrt(fourAns);
        double sixAns = -bNum - fiveAns;
        double xTwo = sixAns/(2*aNum);


        JOptionPane.showMessageDialog(null,"X1 is " + xOne + " & X2 is " +xTwo, "Quadratic Formula" , JOptionPane.PLAIN_MESSAGE);
        xOne = xOne * -1;
        xTwo = xTwo * -1;
        if (xOne < 0 && xTwo < 0){
            JOptionPane.showMessageDialog(null,aNum +"(X " + xOne + ") (X " + xTwo + ")", "Quadratic Formula" , JOptionPane.PLAIN_MESSAGE);
        }else if (xOne < 0 && xTwo > 0){
            JOptionPane.showMessageDialog(null,aNum +"(X " + xOne + ") (X + " + xTwo + ")", "Quadratic Formula" , JOptionPane.PLAIN_MESSAGE);
        }else if (xOne > 0 && xTwo < 0){
            JOptionPane.showMessageDialog(null,aNum +"(X + " + xOne + ") (X " + xTwo + ")", "Quadratic Formula" , JOptionPane.PLAIN_MESSAGE);
        }else if (xOne > 0 && xTwo > 0){
            JOptionPane.showMessageDialog(null,aNum +"(X + " + xOne + ") (X + " + xTwo + ")", "Quadratic Formula" , JOptionPane.PLAIN_MESSAGE);
        }else{
            System.out.println("Wrong");
        }
    }
}
}
import javax.swing.JOptionPane;
公共类quadFormGUI{
公共表格(){
字符串aNumI=JOptionPane.showInputDialog(“您的'A'变量是什么?”);
String bNumI=JOptionPane.showInputDialog(“您的'B'变量是什么?”);
字符串cNumI=JOptionPane.showInputDialog(“您的'C'变量是什么?”);
double-aNum=double.parseDouble(aNumI);
double bNum=double.parseDouble(bNumI);
double cNum=double.parseDouble(cNumI);
双单数=(bNum*bNum)+(aNum*cNum*4);
if(oneAns<0){
showMessageDialog(null,“方程没有解”,“二次公式”,JOptionPane.PLAIN_消息);
}否则{
double-twoAns=(double)Math.sqrt(oneAns);
双三分=-bNum+twoAns;
双xOne=三个一/(2*aNum);
双四分音符=(bNum*bNum)+(-aNum*cNum*4);
双五分=(双)数学.sqrt(四分之一);
双六边形=-bNum-fiveAns;
双xTwo=sixAns/(2*aNum);
showMessageDialog(null,“X1为“+xOne+”&X2为“+xTwo”,二次公式,“JOptionPane.PLAIN_消息”);
xOne=xOne*-1;
xTwo=xTwo*-1;
if(xOne<0&&xTwo<0){
showMessageDialog(null,aNum+“(X”+xOne+”)(X“+xTwo+”),“二次公式”,JOptionPane.PLAIN_消息);
}else if(xOne<0&&xTwo>0){
JOptionPane.showMessageDialog(null,aNum+“(X”+xOne+”)(X+“+xTwo+”),“二次公式”,JOptionPane.PLAIN_消息);
}else if(xOne>0&&xTwo<0){
JOptionPane.showMessageDialog(null,aNum+“(X+”+xOne+”)(X“+xTwo+”),“二次公式”,JOptionPane.PLAIN_消息);
}else if(xOne>0&&xTwo>0){
JOptionPane.showMessageDialog(null,aNum+“(X+”+xOne+”)(X+“+xTwo+”),“二次公式”,JOptionPane.PLAIN_消息);
}否则{
System.out.println(“错误”);
}
}
}
}
不管发生什么,它总是输出“错误的”

如果您在控制台上看到“错误”,您的程序流将转到最后一个“else”部分。这意味着xOne或xTwo或两者都是0。xOne或xTwo可以为零的唯一方法是为a和c输入0。还有一种可能性是,在JOptionPane showInputBox中,输入值后没有按Ok按钮;您可能正在按取消按钮,在这种情况下,将返回一个空值并存储在字符串变量aNumI、bNumI和cNumI中。除这两种情况外,您的程序不能转到else部分。我在一个在线IDE中执行了你的程序,它不会进入其他部分。唯一的区别是我没有使用JOptionPane


关闭输入框后,尝试打印或调试aNumI、bNumI和cNumI的值。我确信它们将为null或具有“0”。告诉我你发现了什么。

是的,对不起,我错了。现在回想起来,为什么我要检查X是否为0?不管怎样,这个程序运行得很好,我只是一直在输入A=0,B=-3,C=0。我修好了,现在可以用了

当你单步执行代码时,调试器会告诉你什么?什么都没有,我的代码运行,一切都按照我的要求运行,除了它也执行最后一个else语句。不,它没有。很明显,并不是每件事都像你想的那样工作,否则你就没有任何理由在这里发帖了。在
if(oneAns<0)
处设置断点,然后重试。逐行检查代码并查看变量的值。它准确地向您显示了导致您进入错误语句的值。如果字符串为NULL,则
Double.parseDouble(String)
不会引发异常吗?一定是零,你不觉得吗?没错。我不知道如果给定的字符串为空,parseDouble会抛出一个NPE。谢谢你指出这一点。正如我之前所说的,这个程序是有效的。它计算所有内容,并进入其中一个正确的if语句。问题是,它不仅停止,它还不断检查语句(显然其他语句都不是真的),而是落在
else
@StealthVice7上。根据您的自我回答,您承认您确实为a和c输入了0,这导致您的程序流转到else块。你还在寻求其他方面的帮助吗?@StealthVice7。那好酷。别忘了标记回答你问题的答案。响应者应享有声誉。:)