You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.8 KiB

import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
/**
* 方程式实体类。
* 封装了构成一个数学方程式的所有元素(操作数、操作符)。
* 操作数统一使用 String 类型,以支持数字、函数表达式等多种形式。
*/
public class Equation {
private final List<String> operands;
private final List<Operator> operators;
/**
* 构造函数。
*
* @param operands 操作数列表(可以是数字、函数表达式等)
* @param operators 操作符列表
*/
public Equation(List<String> operands, List<Operator> operators) {
this.operands = Collections.unmodifiableList(operands);
this.operators = Collections.unmodifiableList(operators);
}
/**
* 获取操作数列表的不可变视图。
*
* @return 操作数列表
*/
public List<String> getOperands() {
return operands;
}
/**
* 获取操作符列表的不可变视图。
*
* @return 操作符列表
*/
public List<Operator> getOperators() {
return operators;
}
/**
* 生成用于展示给用户和保存到文件的标准问题字符串。
* 格式: "操作数1 运算符1 操作数2 = ?"
*
* @return 格式化的方程式字符串
*/
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
// 使用 IntStream 处理操作数和操作符的交替拼接
IntStream.range(0, operators.size())
.forEach(i -> sb.append(operands.get(i))
.append(" ")
.append(operators.get(i).getSymbol())
.append(" "));
sb.append(operands.get(operands.size() - 1)); // 追加最后一个操作数
sb.append(" = ?");
return sb.toString();
}
}