2014-01-19 3 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); 

Я надеялся, что это будет работать, но, как он преобразует строку в два раза, он выходит из строя, как есть символ .. Кто-то есть какие-нибудь хорошие идеи?

+0

Вы получаете какие-либо исключения –

+0

Прочтите строку. Перед разбором выясните, есть ли у нее какие-либо операции, например, +, * и т. Д., Если да, проанализируйте ее как вычисление, иначе проанализируйте ее как число. – TheLostMind

+0

@praveen_mohan - NumberFormatException, скорее всего. – TheLostMind

ответ

0

Double.valueOf() - это всего лишь парсер, который знает, что нужно перевести строку, содержащую действительное представление double. Это не интерпретатор, который знает, как оценивать выражение математики.

Для этого вы можете либо реализовать такой интерпретатор самостоятельно, либо вызвать JavaScript из java. Вы можете найти здесь пример: Is there an eval() function in Java?

-1

Вы не можете сделать это напрямую, как его в формате String, вы можете либо использовать механизм сценария, либо использовать алгоритм шунтирования, чтобы преобразовать его в постфикс, а затем оценить. Синтаксис сценария двигателя

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

Если вы хотите сделать все с API Java, вы можете сделать что-то вроде этого.

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 за различными способами манипулирования/анализа строк.

Смежные вопросы