2017-11-08 11 views
1

私はGUIで科学計算機をプログラミングしようとしていますが、これまで指数ボタンx^y)。javaで科学計算機をプログラミングしようとしているのに指数ボタンが機能しない

ここで私はボタンのクリックイベントを持っていますが、ボタンを1回押すだけで2つの値を取る方法がわからないため、動作しません。

private void btnExponentActionPerformed(java.awt.event.ActionEvent evt) {            

    for (int i = 0; i < 2; i++) 
    { 
     if(i == 0) 
     { 
      double x = Double.parseDouble(String.valueOf(tfdDisplay.getText())); 
     } 
     else if(i == 1) 
     { 
      double y = Double.parseDouble(String.valueOf(tfdDisplay.getText())); 
     } 
     tfdDisplay.setText(null); 
    } 
    double ops = Math.pow(x, y); 
    tfdDisplay.setText(String.valueOf(ops)); 
}           

私はその後、計算、その後、彼らは実際の指数値として入れ、次の値をとり、その後、ユーザーは、指数ボタンをクリックする必要があり、それがテキストフィールドに現在値に利用したいと思います「=」ボタンをクリックすると答えます。

私はオンラインで見て、指数関数ボタンを使って科学計算機を作成する方法を示したビデオを見つけましたが、彼のコードをコーディングする方法に従えば、正しく機能しません。代わりに、ユーザーが自分の指数を置くのではなく、テキストフィールドの内部を正方形にします。

電卓が実際にどのように見えるかを写真で示します。事前に

pic

ありがとう!

編集: ここでは、「=」ボタン用にプログラムしたものがあります。

String answer; 
     secondnum = Double.parseDouble(tfdDisplay.getText()); 
     if(operations == "+") 
     { 
      result = firstnum + secondnum; 
      answer = String.format("%.2f", result); 
      tfdDisplay.setText(answer); 
     } 
     else if(operations == "-") 
     { 
      result = firstnum - secondnum; 
      answer = String.format("%.2f", result); 
      tfdDisplay.setText(answer); 
     } 
     else if(operations == "*") 
     { 
      result = firstnum * secondnum; 
      answer = String.format("%.2f", result); 
      tfdDisplay.setText(answer); 
     } 
     else if(operations == "/") 
     { 
      result = firstnum/secondnum; 
      answer = String.format("%.2f", result); 
      tfdDisplay.setText(answer); 
     } 

「=」ボタンに追加する必要がありますか?だから、

else if(operations == "^") 
     { 
      result = Math.pow(firstnum, secondnum); 
      answer = String.format("%.2f", result); 
      tfdDisplay.setText(answer); 
     } 
+1

for-loopのポイントは何ですか?これは、あなたが有益なスコープの問題を作り出しています。このコードは、私が何か不足していない限り実行されるべきではありません。あなたは同じ要素から値を引き出しているので、 'x'と' y'を同じようにしています。 'y'が' tfdDisplay'以外の要素で設定されることを意味しましたか? – Carcigenicate

+0

テキストフィールドの仕組みを誤解していると思います。ユーザーの入力を待たずに最初の値が解析され、2番目の値はループの最後にクリアされるため、常に空になります。ヒントとして、問題のこの問題を解決する方法を説明します。指数ボタンが押されたときに最初の値を取得する必要があり、等しいボタンが押されたときに最初の値を取得する必要があります。 – Obicere

答えて

0

私は自分の問題を解決する方法を考え出しました。ここで

は、私は、ボタンのクリックイベントの内側に置くものです:

private void btnExponentActionPerformed(java.awt.event.ActionEvent evt) {            

     firstnum = Double.parseDouble(tfdDisplay.getText()); 
     tfdDisplay.setText(null); 
     operations = "^"; 
    }           

、ここでは、私は「=」ボタンのクリックイベントに追加するものです。

else if(operations == "^") 
{ 
    result = Math.pow(firstnum, secondnum); 
    answer = String.format("%.2f", result); 
    tfdDisplay.setText(answer); 
} 

はあなたにObicereをありがとう!

0

私が正しく理解していれば、あなたはtfdDisplay要素内のテキストとしてdigit、その後、^その後、digitボタンを押すと、その後=と、この時点で、あなたは持っている、例えば、2^4。次に、テキストを分割して、次のように2つの値を取得します。

private void btnExponentActionPerformed(java.awt.event.ActionEvent evt) { 
    // Notice the double backslash, it's used because split wants a regular 
    // expression, and^means the beginning of the string in regular 
    // expressions, so you have to escape it using a backslash. The other 
    // one is needed because you should escape backslashes on strings to use 
    // as is 
    String parts[] = tfdDisplay.getText().split("\\^"); 
    double x = Double.parseDouble(parts[0]); 
    double y = Double.parseDouble(parts[1]); 
    double ops = Math.pow(x, y); 
    tfdDisplay.setText(String.valueOf(ops)); 
} 
関連する問題