2016-05-07 14 views
0

私は経験の浅いプログラマであり、入力を解析できないために、多項式の次数と各項の係数を求める派生電卓を作成しています3x^4/4 + sin(x)のようになります。Java - 値が予期せず0にリセットされる

ここは私のクラスです。

package beta; 

import java.math.RoundingMode; 
import java.text.DecimalFormat; 
import java.util.ArrayList; 
import java.util.List; 

import javax.swing.JOptionPane; 

public class DerivativeCalculator 
{ 
    public DerivativeCalculator(String d, String v) 
    { 
     int degree = Integer.parseInt(d); 

     double value = Double.parseDouble(v); 

     coeffList = new ArrayList<Double>(); 
     for (int i = 0; i <= degree; i++) 
     { 
      String console = JOptionPane.showInputDialog("Enter the coefficient of the " 
        + "x^" + i + " term."); 
      Double coeff = Double.parseDouble(console); 

      coeffList.add(coeff); 
     } 

    } 
    public double calc() 
    { 
     double dx = 0.0001; 

     double x1 = value; 
     double y1 = 0; 
     for (int d = degree; d >= 0; d--) 
     { 
      y1 += coeffList.get(d) * Math.pow(x1, d); 
     } 

     double x2 = x1 + dx; 
     double y2 = 0; 
     for (int d = degree; d >= 0; d--) 
     { 
      y2 += coeffList.get(d) * Math.pow(x2, d); 
     } 

     double slope = (y2 - y1)/ (x2 - x1); 

     DecimalFormat round = new DecimalFormat("##.##"); 
     round.setRoundingMode(RoundingMode.DOWN); 

     return Double.valueOf(round.format(slope)); 
    } 

    public String getEquation() 
    { 
     String equation = ""; 
     for (int d = degree; d >= 0; d--) 
     { 
      equation = equation + String.valueOf(coeffList.get(d)) + "x^" + String.valueOf(d) + " + "; 
     } 
     return equation; 
    } 

    public String getValue() 
    { 
     return String.valueOf(value); 
    } 

    private int degree; 
    private double value; 
    private List<Double> coeffList; 

} 

ここで私のテストクラスです。これを実行する

package beta; 

import java.awt.Graphics; 
import java.awt.Graphics2D; 

import javax.swing.JApplet; 
import javax.swing.JOptionPane; 

public class DerivativeCalculatorTest extends JApplet 
{ 
    public void paint(Graphics g) 
    { 
     Graphics2D g2 = (Graphics2D)g; 

     String d = JOptionPane.showInputDialog("Enter the degree of your polynomial: "); 
     String v = JOptionPane.showInputDialog("Enter the x value " 
       + "at which you want to take the derivative"); 

     DerivativeCalculator myDerivCalc = new DerivativeCalculator(d, v); 
     g2.drawString(String.valueOf(myDerivCalc.calc()), 10, 100); 
     g2.drawString(myDerivCalc.getEquation(), 10, 40); 
     g2.drawString(myDerivCalc.getValue(), 10, 70); 
    } 

} 

は正しい誘導体ではない

5.0x^0+ 
0.0 
0.0 

を表示するアプレットウィンドウを作成します。

私は私のプログラムをデバッグし、それがこの行を実行した後、degree(多項式の次数が)でも、ユーザーかかわらず、0にリセットされますすべてが期待どおりに私のテストクラスにビュースイッチまで実行され、それがg2.drawString(String.valueOf(myDerivCalc.calc()), 10, 100);

を実行これで私のクラスのすべてのforループが消えます。

どうしてですか?これを修正するための提案?ありがとう

答えて

5

degreevalueローカルという変数に置き換えます。それらは同じ名前のクラス変数shadowです。

再宣言しないでください。

代わりの

int degree = <something>; 
    double value = <something>; 

あなたはdownvotingに自分をさらすの答えとしてコメントを投稿するときは、

degree = <something>; 
    value = <something>; 
+0

クラスの最後に属性を配置するのはひどい考えです。それらはクラスの最初のコンストラクターの直前にあるはずです – Dici

+0

はい、私の変数名は、通常、Eclipseが通常のように青色に変わっていないのだろうと思っていました – awdreg

3

5.0x^0 = 5.0 * 1 = 5.0ではない、その派生は0です。 私はあなたのコードが動作していると思います。

+0

を必要としています。それが起こると、あなたは担当者を失い、コメントできなくなってしまいます。 – ChiefTwoPencils

+0

私が入力した方程式はx^4-3x^3 + x^2 + 2x^1 + 5x^0のようなものでしたが、私のプログラムは5.0x^0しか表示しませんでした。それは完全に私の多項式の残りの部分を無視しました – awdreg

+0

私は125の担当者になるまで私は正確な答えを知っていない限り私は助けることができない?病気は少しこのコメントを削除します。 – Eric

関連する問題