当前位置: 首页 > 知识库问答 >
问题:

Java-一个值意外重置为0

融烨华
2023-03-14

我正在制作一个导数计算器,要求用户输入多项式的阶数,然后是每个项的系数,部分原因是我是一个没有经验的程序员,不能解析输入,比如3x^4/4sin(x)

这是我的课。

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

这不是正确的导数。

我调试了我的程序,一切都按预期运行,直到视图切换到我的测试类并执行g2。drawString(String.valueOf(myDerivCalc.calc()),10100

执行这一行后,度数(多项式的度数)重置为0,即使用户输入了5。这就把我班上所有的for循环都搞砸了。

为什么会这样?有没有解决这个问题的建议?谢谢


共有2个答案

邢承弼
2023-03-14

不是5.0x^0=5.0*1=5.0,它的导数是0。。我相信你的代码是有效的。

壤驷建德
2023-03-14

重新定义为构造函数中的局部变量。它们使用相同的名称来隐藏类变量。

不要重新申报。

而不是

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

你需要

  degree = <something>;
  value = <something>;
 类似资料:
  • 我使用GNU gcc(4.8.1429)为ARM(ATsam4LC4B:cortexM4 core,256K flash)构建了一个简单的应用程序: 在0x3F000(链接器选项-Ttext=0x3F000)加载并初始化, 在0处复制自身(镜像) 使用assembly跳转到镜像重置处理程序()(接近0) 镜像应用程序开始按预期运行 当达到mirror main()调用的闪存位置(闪存位置0x532

  • 关于Spring bean配置,我有两个主要问题:1。当我从应用程序上下文检索bean时,我通过属性文件读取的属性并不持久化。2.我很难弄清楚如何将bean的值设置为另一个bean-在下面的示例中,我试图将Plan bean的度量属性设置为某个bean。 我有两个小班,一个度量,和一个更大的计划: 但是当我尝试访问这个bean时,我在主应用程序中得到了默认值或空值,这表明这些属性没有持久化:

  • 在下面的代码中,有两个方法scanner1和scanner2,在这两个方法中都创建了Scanner的新对象并扫描输入,然后通过调用close()关闭Scanner。 问题是为什么在scanner2方法中扫描器不能扫描用户输入,即使在此方法中创建新的扫描器对象。请给出一些明确的解释。任何裁判或例子都将是伟大的。

  • 我有一个索引php页面,其中包含一个打印数组值的代码

  • 我的计时器任务没有正常工作。我计划每3秒钟重复一次特定的任务,但这并没有发生。 根据Java文件: 计划(TimerTask任务、长延迟、长周期)。将指定的任务安排为重复的固定延迟执行,从指定的延迟后开始。随后的执行大约按规定的时间间隔定期进行。 但我只有一个“新任务!!!!”控制台打印 我是不是遗漏了什么? 谢谢 更新: 我将尝试在这里粘贴每一段相关的代码,从上到下执行。 开始: