Как Решить строковые выражение
Подскажите пожалуйста. У меня на пример есть: String s = "2+4*6"; Каким образом я могу решить это выражение и получить на него ответ?
Ответы (1 шт):
Автор решения: Дима Ерохин
→ Ссылка
Это я так побаловаться. Можно добавить другие операторы кроме +, но мне лень. Вообще можно было разбить входную строку на под строки, через обертку String прочитать int значения , чтобы можно было складывать числа 10+, а не только простые цифры. Ну а так есть специальные методы и алгоритмы . Сейчас на youtube сам пойду посмотрю как правильно делается.Типа такого - https://www.youtube.com/watch?v=iLnNqqom5KY
c
lass Help {
public static void main(String[] args){
String str = " 1+1+3+1+9";
int[] myint= new int[10]; // массив для хранения цифр
char[] mychar = new char[10]; // массив для хранения операторов
// счетчики массивов
int countChar=0;
int countInt=0;
// Пройтись по строке
for ( int i=0;i < str.length();i++)
{
for( int a =42 ; a <= 57 ;a++ ){
if((str.charAt(i)== (char)a )&& a<=47){ //найти и добавить операторы
mychar[countChar]=str.charAt(i);
countChar++;
}
if((str.charAt(i)== (char)a) && a>=48){ //найти и добавить числа
myint[countInt]=Character.getNumericValue(a);
countInt++;
}
}
}
System.out.print("Массив чисел из строки - ");
for( int i:myint) System.out.print(i+" ");
System.out.print("\nМассив операторов из строки - ");
for(char i:mychar) System.out.print(i+" ");
// Соединение операторов и операндов
int oper = 0;// счетчик операций сложения
int sum=0;
for(int i=0; i < (myint.length-1);i++){
if (myint[i+1] != 0){ /* смотрю чтоб пусто не было в массиве,
если конечно нужны другие операции кроме сложения то над другой способ придумать */
if(mychar[oper]== 43 && i==0)// если первая операция сумма и это первый операнд , то
{ sum+= myint[i]+myint[i+1];
oper++;}
else if(mychar[oper]== 43 ) sum+=myint[i+1];// просто если операция сумма
}
if(myint[i+1]==0) break;// если закончились цифры , то закончить массив
}
System.out.println("\nСумма выраженния : " + str+ " Равна = "+sum);
}}