当我尝试进行计算时,Java将无法识别双精度数

时间:2013-03-17 18:28:47

标签: java

所以对于这个程序,我必须使用java GUI来获取温度和风速,然后从那里我计算Windchill。我有它,以便当用户点击“计算windchill”按钮时,它应该使用我输入的公式来计算它。但我不断遇到这种双重错误,我不知道为什么。你可以在actionPerformed部分找到错误,它是收到此错误的“windChillInt”。感谢。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class Windchill extends JFrame implements ActionListener{
    private static final int FRAME_WIDTH = 300;
    private static final int FRAME_HEIGHT = 200;
    private static final int FRAME_X_ORIGIN = 150;
    private static final int FRAME_Y_ORIGIN = 250;
    private String degree;
    private String wind;
    private int degreeInt;
    private int windInt;
    private double windChillInt;
    private JButton windButton;
    private JLabel prompt;
    private JLabel prompt1;
    private JTextField inputLine;
    private JTextField inputLine1;

    public Windchill(){
        setTitle("Windchill");
        setSize(FRAME_WIDTH, FRAME_HEIGHT);
        setLocation(FRAME_X_ORIGIN, FRAME_Y_ORIGIN);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        Container contentPane = getContentPane();
        contentPane.setLayout(new FlowLayout());    
        inputLine = new JTextField();
        inputLine.setColumns(3);
        inputLine.addActionListener(this);
        contentPane.add(inputLine);
        prompt = new JLabel();
        prompt.setText("Enter the degrees in Farienheight       ");
        prompt.setSize(150,25);
        contentPane.add(prompt);
        inputLine1 = new JTextField();
        inputLine1.setColumns(3);
        inputLine1.addActionListener(this);
        contentPane.add(inputLine1);

        prompt1 = new JLabel();
        prompt1.setText("Enter the wind speed in MPH");
        prompt1.setSize(150,25);
        contentPane.add(prompt1);

        windButton = new JButton("Calculate windchill");
        contentPane.add(windButton);
        windButton.addActionListener(this);
    }
    public void actionPerformed(ActionEvent event){
        if (event.getSource() instanceof JButton){
            JButton clickedButton = (JButton) event.getSource();
            if (clickedButton == windButton){
                degree = inputLine.getText();
                degreeInt = Integer.parseInt(degree);
                wind = inputLine1.getText();
                windInt = Integer.parseInt(wind);
                windChillInt = 0.08(degreeInt - 91.4)        (3.71*math.sqrt(windInt) + 5.81 - 0.25 *windInt) + 91.4;

            }

        }
    }
    public static void main(String[] args) {
        Windchill frame;
        frame = new Windchill();
        frame.setVisible(true);
    }
}

好的,谢谢你让我工作,但现在我有另一个问题,它不会像我想要的那样在GUI上显示新的windChillInt。这是我改变它的原因。

public void actionPerformed(ActionEvent event){
        if (event.getSource() instanceof JButton){
            JButton clickedButton = (JButton) event.getSource();
            if (clickedButton == windButton){
                degree = inputLine.getText();
                degreeInt = Integer.parseInt(degree);
                wind = inputLine1.getText();
                windInt = Integer.parseInt(wind);
                windChillInt = 0.08 * (degreeInt - 91.4)*(3.71* (Math.sqrt(windInt)) + 5.81 - 0.25 *windInt) + 91.4;

                prompt2 = new JLabel();
                prompt2.setText("The windchill is " + windChillInt);
                prompt2.setSize(150,25);
                Container contentPane = getContentPane();
                contentPane.setLayout(new FlowLayout());
                contentPane.add(prompt2);
            }

4 个答案:

答案 0 :(得分:1)

我认为问题在于这一行:

windChillInt = 0.08(degreeInt - 91.4)        (3.71 * math.sqrt(windInt) + 5.81 - 0.25 *windInt) + 91.4;

windChillInt = 0.08(degreeInt - 91.4)应为windChillInt = 0.08 * (degreeInt - 91.4)

然后,您需要将windChillInt = 0.08 * (degreeInt - 91.4)(3.71 * math.sqrt(windInt) + 5.81 - 0.25 *windInt) + 91.4相乘,或将(3.71 * math.sqrt(windInt) + 5.81 - 0.25 *windInt) + 91.4向下移动到自己的语句并将其分配给某些内容。

答案 1 :(得分:1)

将运算符放在两个表达式之间。

前者

result = exp1 operator exp2

在你的情况下

windChillInt = 0.08 * (degreeInt - 91.4) * (3.71*math.sqrt(windInt) + 5.81 - 0.25 *windInt) + 91.4;  

答案 2 :(得分:1)

您遇到语法错误:0.08(degreeInt - 91.4)。你错过了一个乘法运算符吗?

答案 3 :(得分:0)

好吧,考虑到你没有发布错误消息,我假设问题是语法错误,可能是关于unexpected token '('的问题?我没有尝试编译和运行它,但根据代码,问题似乎是你将0.08乘以degreeInt - 91.4,只需将其写在旁边,再做同样的事情用两个带括号的表达式。

从概念上讲,这很好,但不幸的是,大多数编程语言都不是数学。即使你习惯于在整天使用像2x这样的表达式编写方程式,在Java,C,C ++,Python,Ruby的世界中,或者你能想到的任何其他语言(除了Mathematica,旨在支持反映数学符号的语法),您必须改为编写2 * x

我会替换

windChillInt = 0.08(degreeInt - 91.4)        (3.71*math.sqrt(windInt) + 5.81 - 0.25 *windInt) + 91.4;`

windChillInt = 0.08 * (degreeInt - 91.4) * (3.71 * math.sqrt(windInt) + 5.81 - 0.25 * windInt) + 91.4;

我还清理了一些格式。当你刚刚开始时,比如

0.25 *windInt

很好,但随着你的代码库变得越来越大,你将希望能够快速浏览一下你的代码,而不会因为它的编写方式而暂时混淆。选择一些您喜欢的格式约定,并坚持下去。 总是x*y,或总是x * y,但不能同时写两者,并远离x *y,{{1或者沿着那些方向的任何其他东西。我还注意到你在行的中间添加了一个标签,可能是因为它看起来像是一个带有你正在使用的缩进设置的空格。不是太大的交易,但有点奇怪。

另外,我知道这是关于堆栈溢出的第一个问题,所以我不想过于苛刻,但下次尝试只关注导致问题的代码,如果人们需要更多信息,请提供其余的代码。不要只是给他们一个文本墙,并要求他们在其中找到bug。此外,错误消息对于尝试诊断问题的人非常有帮助,因此请考虑下次发布。

最后,我在代码中看到了一堆数字常量。我对windchill背后的数学知之甚少,所以我不确定将这些更改为其他值是否有意义,但一般来说,采用任何可能在代码中更改的常量并放置是个好主意他们在某个变量中。

“可以改变的常数是什么意思?定义不是常数,不是常数吗?”有时,有一些数字,如果你修改它们,仍然有意义。例如,如果您正在编写游戏,请在计算中包含地球上的重力

x* y

你现在有一个问题,因为如果你想改变游戏以在火星上设置一个等级,你必须在你指定重力的地方追捕并添加这样的东西

// assuming yVelocity is in meters/second
yVelocity = yVelocity - 9.8 * timeElapsedThisFrame;

这很快变得非常笨拙且难以维护,更好的解决方案就是从一开始就用变量替换重力常数

if (planet == EARTH) {
    yVelocity = yVelocity - 9.8 * timeElapsedThisFrame;
} else if (planet == MARS) {
    yVelocity = yVelocity - /* whatever the gravity is on mars */ * timeElapsedThisFrame;
}

如果你想改变引力,那就非常简单了。这是一个可以改变的常量的例子。

我建议对// at the top of your class: double forceOfGravity = 9.8; // in your "move" method: yVelocity = yVelocity - forceOfGravity * timeElapsedThisFrame; 0.0891.43.715.810.25执行相同的操作。我不知道这些数字是什么,但也许其中一些与空气压力有关,在这种情况下你的应用程序不适用于珠穆朗玛峰,或者它们可能与人体温度有关,其中如果您的应用程序不适用于猫。我对问题领域了解不多,但这些做法总是一个好主意。此外,它们使代码更具可读性,因为常量的名称描述了它们的作用。

无论如何,你是新人,你在学习,这太棒了!快乐的编码!