Мне нужно реализовать следующее:
Вход (строка):
5+45+100-125+5-10
Вылет из:
= 20
Здесь код реализован только для положительных чисел:
String operacion="10+200+3000";
int tam = operacion.length();
String A[] = new String[100];
int pos = 0;
int sum = 0;
String aux = "";
for(int i = 0; i<tam ; i++)
{
if(operacion.charAt(i) == '+')
{
A[pos] = aux;
pos++;
aux = "";
}
else
{
aux = aux + operacion.charAt(i);
}
}
A[pos] = aux;
pos++;
for(int i = 0; i<pos ; i++)
{
sum=sum+Integer.parseInt(A[i]);
}
System.out.println("= "+sum);
Вылет из
= 3210
Проблема в том, что я не могу сделать это для негативов, чтобы сделать операцию.
Одним из вариантов было бы сохранить операторы и в последнем цикле выполнить соответствующую операцию:
Таким образом, вы получите правильный расчет:
Принимая во внимание, что целые числа имеют знак и что вычитание — это не что иное, как сложение отрицательного числа, я предлагаю это более компактное решение, также использующее регулярные выражения. Также проверьте, были ли пробелы между знаками и цифрами, как вы можете видеть во входных данных:
На выходе мы получим:
Я бы создал еще один массив для хранения отрицательных чисел. Назовем его B. И я бы также создал еще одно целое число для управления позицией.
И тогда в условии мы можем использовать структуру
if-else if-else
следующим образом:Структура
if-else if-else
работает так же, как и a,if-else
хотя в этом случае это будет что-то вроде: «если он соответствует этому условию, сделайте это, если он не соответствует этому, проверьте, соответствует ли он этому другому условию, и если он ему соответствует, сделайте это». другое. Если ни одна из двух проверок не выполняется, сделайте это другое».На самом деле вы сможете использовать значение
aux
для обеих опций, так как оно сбрасывается на пустое каждый раз, когда найдено a+
или a-
.Наконец, вы можете сделать цикл для вычитания отрицательных чисел:
Вы можете сохранить еще один вектор со знаками, сохранить их по мере прохождения цепочки и, наконец, выполнить операцию, например:
Я отредактировал код здесь, возможно, он содержит какую-то ошибку, но я думаю, что только прочитав его, вы поймете идею.
Сложите и вычтите числа, которые находятся в строке. В примере, который я поставил «5+45+100-125+5-10», результат равен 20.
Самый быстрый и простой способ — использовать регулярные выражения, которые соответствуют каждому числу, как положительному, так и отрицательному. Я оставляю вам свой код.
Привет.