2015-06-15 4 views
0

Эта программа принимает строку и добавляет все целые числа в ней, я установил разделитель как «+», окруженный любым количеством пробелов. Он отлично работает с этим, но теперь я хочу, чтобы он работал с любыми отрицательными целыми числами, например, если я вводил «8 + 33 + 1,345 - 37»; выход равен 41. Он даже не доходит до 1,345 или вычитает -37 из общей суммы. Разграничители «пропущены»? Например, я был бы прав, если бы сказал, что компилятор переходит на 8, а затем «+» пропущен, тогда он переходит на 33? И если я , установите разделитель как «\ s * \ + | - \ s *» (попытка + или -), выход по-прежнему 41, почему?Добавление и вычитание чисел из строки

import java.util.*; 

import java.io.*; 

public class Add_em_up 
    { 

      public static void main (String args [])    

     {  

      Scanner x = new Scanner (System.in); 


      System.out.print("Enter something like 8 + 33 + 1,345 + 137 :"); 


      String s = x.nextLine(); 

      Scanner sc1 = new Scanner (s); 
      sc1.useDelimiter("\\s*\\+\\s*");     

      int sum = 0; 
      while (sc1.hasNextInt()) 
      { 
       sc1.skip(",*"); 
       if (sc1.hasNextInt()) 
       { 
        sum = sum + sc1.nextInt();     
       } 

      } 
      System.out.println("Sum is: " + sum); 
     } 
    } 

ответ

3

Просто поместите +, - внутри класса символов.

sc1.useDelimiter("\\s*[-+]\\s*");  
+0

'sc1.split (" \\ s * [- +] \\ s * "); ' –

+0

Это работает, спасибо, но почему мы должны удалить« \\ »и почему он не работает с + | - не« | » означает или тоже? – Limbo

+0

'' 'не относится к плюсу и минусу. Он занимает всю часть слева и всю часть справа. –

1

Хорошо вот простое решение, если вы заинтересованы в использовании библиотеки Exp4j. Библиотека выполнит все вычисления, и все, что вам нужно сделать, это передать уравнение и получить результат.

Вот пример.

Expression e = new ExpressionBuilder("3 * sin(y) - 2/(x - 2)") 
    .variables("x", "y") 
    .build() 
    .setVariable("x", 2.3) 
    .setVariable("y", 3.14); 
double result = e.evaluate(); 
Смежные вопросы