2014-01-19 29 views
0

我試圖製作一個計算器,它可以採用單個數字或進行計算(f.ex 2 + 2)。是否有可能通過掃描儀進行計算,或者是否有人知道採用敏捷的方式來實現它。使用Java中的掃描器方法進行計算

System.out.println("Write in a number or a calculation: "); 
Scanner a = new Scanner(System.in); 
String ab = a.nextLine(); 
Double abc = Double.valueOf(ab); 

我希望這會工作,但它從字符串轉換爲加倍,它崩潰,因爲是char ..有人想到什麼好點子?

+0

你是否有例外 –

+0

閱讀該行..在解析它之前,看看它是否有一些像+,*等操作。如果是的話,解析它爲一個計算,否則解析爲一個數字。 – TheLostMind

+0

@praveen_mohan - NumberFormatException最有可能.. – TheLostMind

回答

0

Double.valueOf()只是一個解析器,它知道要翻譯包含double的有效表示的字符串。它不是一個知道評估數學表達的解釋者。

要做到這一點,你可以自己實現這樣的解釋器或從Java調用JavaScript。你可以在這裏找到這樣的例子:Is there an eval() function in Java?

-1

你不能直接做它的字符串格式,你可以使用腳本引擎,或者你可以使用分流碼算法轉換爲後綴,然後評估。 腳本引擎的語法是

ScriptEngineManager manager = new ScriptEngineManager(); 
    ScriptEngine eng = manager.getEngineByName("JavaScript"); 
    String foo = "50+2"; 
    System.out.println(eng.eval(foo)); 
0

如果你想要做的與Java API的一切,你可以做這樣的事情。

System.out.println("Write in a number or a calculation: "); 
Scanner a = new Scanner(System.in); 
String ab = a.nextLine(); 
if(ab.contains("+")) { 
    // parse the string 
} else { 
    Double abc = Double.valueOf(ab); 
} 

這將需要大量的工作得到它的工作適用於所有情況(以上只是檢查是否是添加的壞硬編碼方式),但它可以工作。

請參閱http://docs.oracle.com/javase/7/docs/api/java/lang/String.html瞭解操縱/解析字符串的不同方法。