我应该实现一个包含数学表达式的二叉树,为每个二进制或一元表达式使用不同的类.例如:
Expression e = new Sin(
new Pow(
new Mul(
new Plus(
new Mul(new Num(2), new Var("x")),
new Var("y")),
new Num(4)),
new Var("x")));
Run Code Online (Sandbox Code Playgroud)
树的叶子可以是变量或数字.可以使用以下方法将每个变量转换为另一个表达式:
Expression assign(String var, Expression expression)
Run Code Online (Sandbox Code Playgroud)
我有一个用于一元和二元运算符的抽象类.
我一直在努力弄清楚如何将相同的表达式分配给表达式本身的一个变量.例如:
Expression e1 = new Plus(1,"x");
e1.assign("x", e1);
System.out.println(e1.toString());
Run Code Online (Sandbox Code Playgroud)
输出应该是:
((x+1)+1)
Run Code Online (Sandbox Code Playgroud)
实际发生的是表达式的左侧部分指向自身,导致无限循环.有没有办法复制对象但使用不同的指针来避免它?或者可能采用不同的方式来实现方法"assign"的工作方式?
这是我的实现:
二进制表达式类:
import java.util.List;
import java.util.Map;
abstract public class BinaryExpression extends BaseExpression implements Expression {
protected Expression first, second;
public BinaryExpression(Expression first, Expression second) {
this.setSecond(second);
this.setFirst(first);
}
public BinaryExpression(double number1, double number2) {
this(new Num(number1), new Num(number2)); …Run Code Online (Sandbox Code Playgroud) 我正在编写一个函数,用于查找字符串中用逗号分隔的前 4 个整数。
例如,如果字符串是:
123,4,9.5,av4,3,g1,1,6
该函数会将数字提取到不同的数组中:123,4,3,1
一切正常,直到我尝试输入中间有空格的输入,这不应该被视为有效数字,但一旦碰到空格,循环就会停止。有解决办法吗?
我不允许使用除stdio.h.
这是我的代码:
int getParameters(int parameters[], int size) {
char input[100];
int indexInput = 0, indexParameters = 0;
int skip = 0, numberSeen = 0, negativeSeen = 0;
int i = 0;
scanf("%s", input);
for ( ; input[indexInput]!= '\0' && indexParameters < size; ++indexInput) {
if (input[indexInput] == ',' && skip == 1) {
parameters[indexParameters] = 0;
skip = 0;
negativeSeen = 0;
} else if (input[indexInput] == ',' && negativeSeen …Run Code Online (Sandbox Code Playgroud)