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

2 つの式の間に演算子を挿入します。

例えば

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単純にその隣に書いて、括弧で囲まれた 2 つの式で同じことを繰り返していることです。

概念的にはこれで問題ありませんが、残念なことに、ほとんどのプログラミング言語は数学ではありません。2xJava、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*yx * yx *yx* 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.0891.43.715.810.25、およびについても同じことをお勧めし91.4ます。これらの数値が何であるかはわかりませんが、気圧に関係している可能性があります。その場合、アプリはエベレスト山では機能しません。または、人間の体温に関係している可能性があります。あなたのアプリが猫に対して機能しない場合。問題のドメインについてはよくわかりませんが、これらのプラクティスは常に良い考えです。また、定数の名前がその機能を説明しているため、コードが読みやすくなります。

とにかく、あなたは新しく、学んでいて、それは素晴らしいことです! ハッピーコーディング!

于 2013-03-18T04:56:44.513 に答える