怎样取得这个方程的系数

kosora曹 2011-09-27 06:02:26
让用户输入一个字符串“2x^3+1.1x^2+0.9x-1.4=0”方程,怎样截取这四个系数(包括常数项)啊?
...全文
124 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
kosora曹 2011-09-28
  • 打赏
  • 举报
回复
谢谢啦!
打油的程序员 2011-09-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 chenchenyangll 的回复:]


输入一变立马报销啊

[/Quote]


这种简易方法只能适用于“标准方程”,你可以稍微,修改以下。


try {
String sourceString = "2x^3 - 1.1x^2+ 0.9x-1.4=0";
System.out.println(sourceString);
sourceString = sourceString.replaceAll("\\s", "");//先将式子中的空白符消除
System.out.println(sourceString);
//然后扫描它,如果缺少x3 就补 +0x^3,
//如果缺少x2 就补 +0x^2,
//如果缺少x 就补 +0^x,
//如果缺少常数 就补+0,
//同时维持顺序,总之要保证“标准的”,下面的步骤才能顺利执行
if(sourceString.indexOf("x^3") == -1){
sourceString = "+0x^3" + sourceString;
}
if(sourceString.indexOf("x^2") == -1){
int pos = sourceString.indexOf("x^3") ;
sourceString = sourceString.substring(0,pos+3)+"+0x^2" + sourceString.substring(pos+3);
}
if(sourceString.lastIndexOf("x") == sourceString.indexOf("x^2")){
int pos = sourceString.indexOf("x^2") ;
sourceString = sourceString.substring(0,pos+3)+"+0x" + sourceString.substring(pos+3);
}
if(sourceString.lastIndexOf("x") +1 == sourceString.indexOf("=")){
int pos = sourceString.lastIndexOf("x") ;
sourceString = sourceString.substring(0,pos+1)+"+0" + sourceString.substring(pos+1);
}

String regex = "^(.+)x\\^3(.+)x\\^2(.+)x(.+)=0$";//这里只有提取功能,还无法进行验证

Matcher matcher = Pattern.compile(regex).matcher(sourceString);//

if(matcher.matches()){ ;

double a = Double.parseDouble(matcher.group(1));//如果系数>0 自动会将+去除

double b = Double.parseDouble(matcher.group(2));//如果系数不是常数,她是一个表达式

double c = Double.parseDouble(matcher.group(3));//比如系数是(3y + 4z) 此时应该进行更复杂的处理

double d = Double.parseDouble(matcher.group(4));

System.out.println(a + " " + b + " " + c + " " + d); }

}catch (Exception e) {

throw new Exception("输入错误");

}

24K純帥 2011-09-27
  • 打赏
  • 举报
回复
二次方,三次方都有函数的
chenchenyangll 2011-09-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 k3108001263 的回复:]

Java code

try {
String regex = "(.+)x\\^3[\\s]*[+\\-][\\s]*(.+)x\\^2[\\s]*[+\\-][\\s]*(.+)x[\\s]*[+\\-][\\s]*(.+)[\\s]*=.*";
String sourceString = "2x^3+1.1x^2+0.9x-1.4=0";
……
[/Quote]

输入一变立马报销啊
打油的程序员 2011-09-27
  • 打赏
  • 举报
回复

try {
String regex = "(.+)x\\^3[\\s]*[+\\-][\\s]*(.+)x\\^2[\\s]*[+\\-][\\s]*(.+)x[\\s]*[+\\-][\\s]*(.+)[\\s]*=.*";
String sourceString = "2x^3+1.1x^2+0.9x-1.4=0";
Matcher matcher = Pattern.compile(regex).matcher(sourceString);//

if(matcher.matches()){ ;
double a = Double.parseDouble(matcher.group(1));
double b = Double.parseDouble(matcher.group(2));
double c = Double.parseDouble(matcher.group(3));
double d = Double.parseDouble(matcher.group(4));
System.out.println(a + " " + b + " " + c + " " + d);
}
}catch (Exception e) {
throw new Exception("输入错误");
}



chenchenyangll 2011-09-27
  • 打赏
  • 举报
回复
用栈吧 应该可以做的 不过麻烦了点
Left_you 2011-09-27
  • 打赏
  • 举报
回复
用正则捕获数字,具体的我也不会...
网上搜搜吧。
a1540077373 2011-09-27
  • 打赏
  • 举报
回复
不过有个缺陷是,方程必须是按照降序排列。常数在等号前面。临时用还是可以。
a1540077373 2011-09-27
  • 打赏
  • 举报
回复
public class Test {
public static void main(String[]args){
String str="2x^3+1.1x^2+0.9x-1.4=0";
for(int i=0,j=0,k=str.length();i<k;i++){
String s=String.valueOf(str.charAt(i));
if(s.equals("+")||s.equals("-")||s.equals("*")||s.equals("/")){
j=i+1;
}else if(s.equals("x")||s.equals("=")){
System.out.println(str.substring(j,i));
}
}
}
}
这个基本能实现你的要求,你试试。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧