具有GUI的二次公式仅返回NaN

时间:2018-08-09 20:00:33

标签: java formula nan quadratic

我试图制作一个可以执行二次公式的程序。我也已经作为一个控制台程序完成了它,并且它可以工作,但是现在我想使用GUI来完成。现在我的问题是,它仅显示NaN。我已经从工作控制台程序中复制了公式,所以这不是问题。我认为它必须与解析有关。在这里您可以看到代码:

@FunctionalInterface
public interface VargsFunction<T,R> {
    @SuppressWarnings("unchecked")
    R apply(T...  t);
}

如果您能帮助我,我会很高兴,因为我试图解决问题大约5小时,这简直使我沮丧。

谢谢

1 个答案:

答案 0 :(得分:0)

据我所知道的格式,计算值的代码不在任何事件处理程序中。这是程序的一个版本,它使用一个面板和一个按钮进行计算。 (请记住,并非所有输入都会产生结果。您不能取负数的平方根)

public void launchScreen() {
    JFrame frame = new JFrame("Mitternachtsformel");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(500, 500);
    //panel erstellen
    JPanel panel = new JPanel();
    panel.setSize(500, 500);
    panel.setBackground(Color.white);

    // Using a grid layout instead of multiple panels
    GridLayout layout = new GridLayout(0,2);
    panel.setLayout(layout);

    JTextField text1 = new JTextField(10);
    JTextField text2 = new JTextField(10);
    JTextField text3 = new JTextField(10);
    JTextField result = new JTextField(10);
    JButton solveButton = new JButton("Solve");
    // Do the calculation when the "Solve" button is pressed
    solveButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e)
        {
            try {
                double aZahl = Double.parseDouble(text1.getText());
                double bZahl = Double.parseDouble(text2.getText());
                double cZahl = Double.parseDouble(text3.getText());
                double x1 = (-bZahl + (Math.sqrt((bZahl*bZahl) - 4 * aZahl *cZahl))) / (2*aZahl);
                double x2 = (-bZahl - (Math.sqrt((bZahl*bZahl) - 4 * aZahl *cZahl))) / (2*aZahl);
                result.setText(x1 + ", " + x2);
            }
            catch(Exception ex) {
                result.setText("ERROR: " + ex.getMessage());
            }
        }
    });

    panel.add(new JLabel("Geben sie einen Wert für a an: "));
    panel.add(text1);
    panel.add(new JLabel("Geben sie einen Wert für b an: "));
    panel.add(text2);
    panel.add(new JLabel("Geben sie einen Wert für c an: "));
    panel.add(text3);
    panel.add(solveButton);
    panel.add(result);
    frame.add(panel);
    frame.setVisible(true);
}

enter image description here