0

所以对于这个程序,我必须使用 java GUI 来获取温度和风速,然后从那里计算 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

4 回答 4

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向下移动到它自己的语句并将其分配给某些东西。

于 2013-03-17T18:32:25.313 回答
1

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

例如

result = exp1 operator exp2

在你的情况下

windChillInt = 0.08 * (degreeInt - 91.4) * (3.71*math.sqrt(windInt) + 5.81 - 0.25 *windInt) + 91.4;  
于 2013-03-17T18:32:35.317 回答
1

你有一个语法错误: 0.08(degreeInt - 91.4)。您是否缺少乘法运算符?

于 2013-03-17T18:33:10.707 回答
0

好吧,考虑到您尚未发布错误消息,我假设问题是语法错误,unexpected token '('可能是关于 的?我没有尝试编译和运行它,但是根据代码,问题似乎是你通过简单地在它旁边写它来乘以,然后用两个括号表达式再次做同样的事情0.08degreeInt - 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,x* y或任何其他类似的东西。我还注意到您在行中间添加了一个制表符,可能是因为它看起来像一个带有您正在使用的缩进设置的空格。没什么大不了的,但有点奇怪。

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

最后,我在您的代码中看到了一堆数字常量。我对 Windchill 背后的数学了解不多,所以我不确定将这些更改为其他值是否有意义,但一般来说,采用任何可能在代码中更改的常量并放入它们在某处的变量中。

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

// 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.08, 91.4, 3.71, 5.81, 0.25, 和做同样的事情91.4。我不知道这些数字是什么,但可能其中一些与气压有关,在这种情况下,您的应用程序将无法在珠穆朗玛峰上运行,或者可能与人体温度有关,其中万一您的应用程序不适用于猫。我对问题域了解不多,但这些做法总是一个好主意。此外,它们使代码更具可读性,因为常量的名称描述了它们的作用。

无论如何,你是新人,你正在学习,那太好了!快乐编码!

于 2013-03-18T04:56:44.513 回答