对于一个微积分编程项目,我们被要求编写一个模拟辛普森 1/3 和 3/8 规则的程序。
我们应该采用多项式(即 5x^2+7x+10),但我正在努力将其概念化。我已经开始使用扫描仪,但有没有更好的方法来正确读取多项式?
任何示例或参考材料将不胜感激。
一个简单的方法(让你开始)是使用一个数组。
在您的示例中:5x^2 + 7x + 10
将是:
{10,7,5}
即在索引 0 处,索引 1 处的 x^0 的因子 10 是索引 2 处的 x^1 的 7 是 x^2 处的 10。
当然这不是最好的方法。想办法弄清楚你将如何代表x^20
在 java 中,最简单的方法是预先格式化您的输入并只要求输入常量——如“请输入 X^2 项”(然后是 X 项,然后是常量)。
如果这不可接受,您将很容易受到输入样式差异的影响。您可以通过 + 和 - 上的 String.split[ting] 来分隔这些术语,这会给您留下如下内容:
[5x^2]、[7x]、[10]
然后,您可以搜索包含“x^2”和“x”的字符串以区分您的术语
当然,首先删除空格和 .toLowerCase() 以应对用户差异。
当您拆分字符串时,您需要识别 - 情况,以便您可以否定这些常量。
你可以做两个分裂,一个在+另一个在-。您也可以将 StringTokenizer 与保留“令牌”的选项一起使用,这可能更直接,但 StringTokenizer 让一些人有点不舒服,所以选择适合您的任何东西。
请注意,即使用户键入“5x^2 + 10 + 7 x”,这也会成功,这很方便。
我建议您从一个 Function 接口开始,该接口接受多个输入值并返回一个输出值:
public interface Function {
double evaluate(double x);
}
编写多项式实现:
public class Poly {
public static double evaluate(double x, double [] coeffs) {
double value = 0.0;
if (coeffs != null) {
// Use Horner's method to evaluate.
for (int i = coeffs.length-1; i >= 0; --i) {
value = coeffs[i] + (x*value);
}
}
return value;
}
}
将它传递给您的集成商并让它完成它的工作。
我相信解析是我的问题。我对java有点陌生,所以这让我很困扰。
您应该使用解析器生成器。
解析器生成器是一种读取语法规范并将其转换为可以识别与语法匹配的 Java 程序的工具。除了解析器生成器本身之外,JavaCC 还提供与解析器生成相关的其他标准功能,例如树构建(通过 JavaCC 附带的名为 JJTree 的工具)、操作、调试等。
JavaCC 的常见问题解答如何解析算术表达式?
请参阅 JavaCC 附带的示例。
请参阅有关编译的任何文本。