Как Решить строковые выражение

Подскажите пожалуйста. У меня на пример есть: 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);
        }}
       
→ Ссылка