尝试使用Double与double计算用户输入

时间:2014-05-14 18:39:23

标签: java double runtime-error

现在我正在开发一个GUI,它将根据用户输入文本字段的内容计算运动学值。我创建了一个私有内部类,其值为Double(而不是double),然后创建了一个方法来根据给定的值获取值。例如,这会返回初始速度:

public Double getInitialVelocity(Double vf, Double a, Double ti, Double tf) {
    deltaT = deltaT(tf, ti);
    initialVelocity = vf - (a * deltaT);
    df.format(initialVelocity);
    return initialVelocity;
}

当我尝试测试此方法时出现问题。我设置了新的双打,并在我的主要课程中使用getInitialVelocity

Kinematics test = new Kinematics(); // creates object from inner class
Double vf = 1.0, a = 2.0, ti = 0.5, tf = 1.5;
test.getInitialVelocity(vf, a, ti, tf);

当我运行此测试时,我收到此错误:

Static Error: No method in Kinematics with name 'getInitialVelocity' matches this     invocation
    Arguments: (Double, Double, Double, Double)
    Candidate signatures: double getInitialVelocity()

有谁知道如何正确地做到这一点?我需要使用类型Double,因为我正在比较给出的值,然后使用基于哪些值为null的适当公式。另外,从String转换时,我应该只使用Double.parseDouble(textField.getText());吗?

编辑1:以下是我班级的相关部分:

私人内部课程(运动学):

private class Kinematics {
        private Double initialVelocity, finalVelocity, acceleration, timeFinal, timeInitial;
        private Double deltaT;
        // constructor
        public Kinematics() {
        }
        public Double deltaT(Double tf, Double ti) {
            if(!(tf == null && ti == null)){
                deltaT = tf - ti;
            } return deltaT;
        }
        public Double getInitialVelocity(Double vf, Double a, Double ti, Double tf) {
            deltaT = deltaT(tf, ti);
            initialVelocity = vf - (a * deltaT);
            df.format(initialVelocity);
            return initialVelocity;
        }

private class Kinematics { private Double initialVelocity, finalVelocity, acceleration, timeFinal, timeInitial; private Double deltaT; // constructor public Kinematics() { } public Double deltaT(Double tf, Double ti) { if(!(tf == null && ti == null)){ deltaT = tf - ti; } return deltaT; } public Double getInitialVelocity(Double vf, Double a, Double ti, Double tf) { deltaT = deltaT(tf, ti); initialVelocity = vf - (a * deltaT); df.format(initialVelocity); return initialVelocity; }

在我的主要课程(KinematicsPanel)中,我有:

    Kinematics values = new Kinematics();
    viLabel = new JLabel("Initial Velocity: ");
    viText = new JTextField(1);
    vfLabel = new JLabel("Final Velocity: ");
    vfText = new JTextField(1);
    aLabel = new JLabel("Acceleration: ");
    aText = new JTextField(1);
    tiLabel = new JLabel("Initial Time: ");
    tiText = new JTextField(1);
    tfLabel = new JLabel("Final Time: ");
    tfText = new JTextField(1);
    // compute button & result
    compute = new JButton("Compute");
    compute.addActionListener(this);
    result = new JTextField(2);
    result.setEditable(false); // can not be edited
public void actionPerformed(ActionEvent e) {
    String action = e.getActionCommand();
    // parse each string to a value
    Double vf = 0.0, a = 0.0, ti = 0.0, tf = 0.0;
    if(vfText != null) {vf = Double.parseDouble(vfText.getText());}
    if(aText != null) {a = Double.parseDouble(aText.getText());}
    if(tiText != null) {ti = Double.parseDouble(tiText.getText());}
    if(tfText != null) {tf = Double.parseDouble(tfText.getText());}
    if(action.equals("Compute")) {
        if(viText == null) { // get initial velocity
            // get values
            values.getInitialVelocity(vf, a, ti, tf);
            System.out.println(values.toString()); // to test
            result.setText(values.toString());
        }
    }
截至目前,这没有任何原因,这就是我在Dr.Java的交互窗格中测试该方法的原因。

Edit2:正在使用的格式函数在主类中: Kinematics values = new Kinematics(); viLabel = new JLabel("Initial Velocity: "); viText = new JTextField(1); vfLabel = new JLabel("Final Velocity: "); vfText = new JTextField(1); aLabel = new JLabel("Acceleration: "); aText = new JTextField(1); tiLabel = new JLabel("Initial Time: "); tiText = new JTextField(1); tfLabel = new JLabel("Final Time: "); tfText = new JTextField(1); // compute button & result compute = new JButton("Compute"); compute.addActionListener(this); result = new JTextField(2); result.setEditable(false); // can not be edited public void actionPerformed(ActionEvent e) { String action = e.getActionCommand(); // parse each string to a value Double vf = 0.0, a = 0.0, ti = 0.0, tf = 0.0; if(vfText != null) {vf = Double.parseDouble(vfText.getText());} if(aText != null) {a = Double.parseDouble(aText.getText());} if(tiText != null) {ti = Double.parseDouble(tiText.getText());} if(tfText != null) {tf = Double.parseDouble(tfText.getText());} if(action.equals("Compute")) { if(viText == null) { // get initial velocity // get values values.getInitialVelocity(vf, a, ti, tf); System.out.println(values.toString()); // to test result.setText(values.toString()); } }

2 个答案:

答案 0 :(得分:1)

你的代码一切正常,你使用哪个编译器? 方法getInitialVelocity在类Kinematics?

答案 1 :(得分:0)

看起来,你使用的是jdk 1.4或更低版本,不支持自动装箱。

所以它无法将Double转换为double。但这应该给你一个编译时间

如果您使用像eclipse这样的IDE,则会出现

错误。

OR

可能是您调用的方法有不同的签名。

尝试检查jdk版本并发布全班,如果上面的一个没有解决你的问题。