2017-07-18 77 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); 
     } 
    } 

這裏是解決方案你的問題。