Java中拆分多项式字符串后循环调用节点添加方法的实现问题
解决方案:正确解析多项式项并调用Polynomial.add方法
关键问题修正
- 字符串转整数错误:你使用的
Integer.getInteger()是读取系统环境变量的方法,并非字符串转整数的工具,正确做法是用Integer.parseInt()。 - 拆分逻辑不合理:当前的
split("[ ^//x]")会生成大量空字符串,无法精准提取系数和指数,需要针对不同类型的多项式项做针对性解析。
项解析逻辑
针对每一个拆分出的多项式项(如4x^2、2x、3),按以下规则处理:
- 常数项(不含
x):直接将项转为整数作为系数,指数设为0 - 一次项(含
x但无^):提取x前的数字作为系数(若x前无数字,默认系数为1),指数设为1 - 高次项(含
x^):以x^为分隔符拆分,前半部分为系数,后半部分为指数
修改后的完整代码
import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class Proj2 { public static void main(String[] args) { Polynomial list1 = new Polynomial(); File file = new File("polynomials.txt"); try (BufferedReader br = new BufferedReader(new FileReader(file))) { String line; while ((line = br.readLine()) != null) { // 按+拆分每一个多项式项 String[] terms = line.split("\\+"); for (String termStr : terms) { // 去除项前后可能存在的空格(如果文件里有) termStr = termStr.trim(); int coefficient; int exponent; if (termStr.contains("x^")) { // 处理高次项,如4x^2 String[] parts = termStr.split("x\\^"); // 处理系数:如果x前是空字符串(如x^2),系数为1 coefficient = parts[0].isEmpty() ? 1 : Integer.parseInt(parts[0]); exponent = Integer.parseInt(parts[1]); } else if (termStr.contains("x")) { // 处理一次项,如2x或x String coeffPart = termStr.replace("x", ""); coefficient = coeffPart.isEmpty() ? 1 : Integer.parseInt(coeffPart); exponent = 1; } else { // 处理常数项,如3 coefficient = Integer.parseInt(termStr); exponent = 0; } // 调用Polynomial的add方法添加节点 list1.add(coefficient, exponent); // 可选:打印验证解析结果 System.out.printf("添加项:系数%d,指数%d%n", coefficient, exponent); } System.out.println("当前多项式解析完成"); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (NumberFormatException e) { e.printStackTrace(); } } }
代码说明
- 用增强for循环遍历拆分后的项,比普通for循环更简洁
- 加入
trim()处理,避免项前后的空格干扰解析 - 针对
x前无数字的情况(如x^2或x)做了兼容,默认系数为1 - 每解析一个项就直接调用
add方法,无需多余嵌套循环
内容的提问来源于stack exchange,提问作者mat515
相关产品推荐
相关产品推荐

