2017-07-18 78 views
0
String str="2x+5=15"; 
    //here how to find x 
    String res[]=str.split([+=]); 
    int x=Integer.parseInt(res[0].charAt(0)); 
    int y=Integer.parseInt(res[1]); 
    int z=Integer.parseInt(res[2]); 
    int res=(z-y)/x; 
    System.out.println(res[0].charAt(1)+" is "+res); 

是否有其他方法来解决这类线性方程?我是一个初学者..这种方法看起来那么坏..java中的线性方程

+0

是的,它看起来不好。尝试在Java中使用数学包来处理这类事情。例如,可以从Java调用R。 –

+0

我假设你只是为了好玩而开发这个小程序,而不是在一个更大的项目中使用它。你的方法适用于这个特定的方程,但是对于大多数输入都会失败。如果方程中有负号,该怎么办?如果“x”之前的因子写入多个字符会怎么样?你可以调整你的正则表达式来检测'x'和'-'符号来解决这些问题。另外,如果'str'格式不正确?例如,可能有几个“=”符号。这是学习Java中的异常处理的好机会。 – francoisr

+0

哦!好吧,我会尝试蒂姆 – user634656

回答

0

你可以尝试做这样的事情用一个for循环要经过string和检查每个char如果一个特殊的char(+, -, *),每当你得到从上一次点击这样一个字符串,并将其解析为一个int,然后进行计算。你需要小心几件事情,但你总是可以问你是否遇到更多问题。 好运

0

模式匹配将帮助您:

String str = "-50000x -50000 = -150000"; //ax+b=c 
Pattern p = Pattern.compile("^(-?\\d+)\\s?(x)\\s?\\+?\\s?(-?\\d+)\\s?=\\s?(-?\\d+)$"); 
Matcher m = p.matcher(str); 
double a = 0, b = 0, c = 0; 

if (m.find()) { 
    a = Double.valueOf(m.group(1)); 
    b = Double.valueOf(m.group(3)); 
    c = Double.valueOf(m.group(4)); 

    double res = (c - b)/a; 
    System.out.println(m.group(2) + " is " + res); //x is 2.0 
} 

模式:

  • \s是空间|| \d为数字
  • 数x +/-数=数
  • 你可以有一个或minus
  • 可以将每个元件(操作者/数)之前或之后有一个空间或不
  • 它将还发现像“X”或“Y”不管信,
  • 也更好地利用double,而不是int为师

说明详细可与典型值荷兰国际集团在谷歌的“Java 8模式” //并在网站上那里你对我做了完美搭配的

例这里模式的所有元素的解释:Regex101 demo

0
import java.util.*; 
class stack 
{ 
    public static void main(String[] args) 
    { 
    String str="2x+5=15";    //here how to find x 
    StringTokenizer st=new StringTokenizer(str,"+="); 
    String aa=st.nextToken(); 
    int x= Character.getNumericValue(aa.charAt(0)); //char to int conversion. 
    int y=Integer.parseInt(st.nextToken()); 
    int z=Integer.parseInt(st.nextToken()); 

    int res=(z-y)/x; 
    System.out.println(res); 
     } 
    } 

这里是解决方案你的问题。