Java实现数组的多项式表示:Double数组转指定格式多项式
问题描述
- 需求:实现
printPoly方法,接收Double类型数组并转换为对应多项式字符串。例如输入[2.0, 3.0, -2.0]时,输出应为2.0x^2 + 3.0x^1 - 2.0。 - 现有问题:原有实现采用双循环逻辑,先拼接所有系数,再拼接所有指数,导致系数与对应指数完全分离,实际输出形如
2.0 1.0 2.0 1.0 x^3 x^2 x^1,不符合预期。 - 原有实现代码:
public String printPoly(Double[] doubles) { String polynomialString = ""; for (int i = 0; i < doubles.length; i++) { polynomialString += doubles[i] + " "; } for (int j = doubles.length - 1; j >= 0; j--) { if (j == 0) { polynomialString += " "; break; } polynomialString += "x^" + j + " "; } return polynomialString; }
修正思路
- 废弃双循环逻辑,改为单循环遍历,每遍历一个数组元素,同时处理对应系数、对应指数以及项之间的连接符,保证系数紧跟指数输出。
- 明确数组与多项式项的对应规则:长度为
n的数组中,第i位系数对应的指数为n - 1 - i,与示例匹配。 - 特殊处理指数为0的常数项:无需拼接
x^0部分。 - 统一处理项的连接符号:避免出现
+ -2.0这类冗余符号,负系数项前直接拼接减号,正系数项(非首项)前拼接加号。
修正后代码
public String printPoly(Double[] doubles) { StringBuilder sb = new StringBuilder(); int length = doubles.length; if (length == 0) return ""; for (int i = 0; i < length; i++) { double coefficient = doubles[i]; int exponent = length - 1 - i; // 跳过系数为0的项,如需保留可删除该行 if (coefficient == 0.0) continue; // 处理符号连接 if (i != 0) { if (coefficient > 0) { sb.append(" + "); } else { sb.append(" - "); coefficient = Math.abs(coefficient); } } else if (coefficient < 0) { // 首项为负的情况直接拼接负号 sb.append("-"); coefficient = Math.abs(coefficient); } // 拼接系数 sb.append(coefficient); // 拼接指数部分,常数项无需拼接x if (exponent > 0) { sb.append("x^").append(exponent); } } return sb.toString(); }
效果验证
- 输入
[2.0, 3.0, -2.0],输出为2.0x^2 + 3.0x^1 - 2.0,完全符合预期。 - 不存在系数与指数分离的问题,每一项的系数与对应指数紧跟输出。
内容的提问来源于stack exchange,提问作者shaun0367
相关产品推荐
相关产品推荐

