Строковый калькулятор, все операторы включены с приоритетом работы - PullRequest
0 голосов
/ 20 октября 2019

Я пишу программу, которая вычисляет строки и вычисляет их с приоритетом операций. Я беру строки с подстрокой, и я написал метод, который преобразует строковые числа в целочисленное значение, мне просто нужно написать калькулятор. Эта строка может быть как 5 * 20 / 2-3 + 4 Застрял в петлях. В этом коде 5 * 5 * 5 верните мне 2225 и не могу найти почему. Если я смогу решить проблему, другим операторам будет легко.

import java.util.Scanner;
class Sayibulucudemo{
public int deger(String sentence){
    int length=sentence.length();                                                                   //METHOD THAT CAST STRING TO INTEGER
    int sayi =0;
    int sayiyardimcisi=0;
    for (sayiyardimcisi=0;sayiyardimcisi<length;sayiyardimcisi++) {
        int basamakatayıcısı=(int)Math.pow(10,length-1-(sayiyardimcisi));
        sayi+=basamakatayıcısı*(sentence.charAt(sayiyardimcisi)-'0');
        length = sentence.length();
    }
    return sayi;
}
}
public class ardanin{
public static void main(String[] args) {
    Scanner klavye = new Scanner(System.in);
    Sayibulucudemo obje = new Sayibulucudemo();
    String sentence = "("+klavye.nextLine()+")";
    String s1="";//önü
    String s2="";//arkası
    String s4="";
    String s5="";
    int a=0;
    int b=0;
    int c=0;
    int d=0;
    int e=0;
    int f=0;
    int o=0;
    String sayininsolu="";
    String sayininsagi="";
    int sayininsolusayi=0;
    int sayininsagisayi=0;
    while(sentence.contains("(")){
        while(sentence.contains("*")){
            for(a=0;a<sentence.length();a++){
                if(sentence.charAt(a)=='*'){
                    for(b=a-1;b>=0;b--){
                        if(sentence.charAt(b)=='*'||sentence.charAt(b)=='/'||sentence.charAt(b)=='%'||sentence.charAt(b)=='+'||sentence.charAt(b)=='-'||sentence.charAt(b)=='('||sentence.charAt(b)=='('){
                            s4=sentence.substring(b+1,a);
                            d=obje.deger(s4);
                            o=a;
                            a=0;
                            break;
                        }   
                    }   
                    for(c=o+1;c<sentence.length()-1;c=c){
                        c+=1;
                        if (sentence.charAt(c)=='*'||sentence.charAt(c)=='/'||sentence.charAt(c)=='%'||sentence.charAt(c)=='+'||sentence.charAt(c)=='-'||sentence.charAt(c)==')'||sentence.charAt(c)=='(') {
                            s5=sentence.substring(o+1,c);
                            e=obje.deger(s5);
                        }
                        else{
                            continue;
                        }

                    }


                f=d*e;
                sentence=""+f;
                }
        }

        }
            System.out.println(sentence);
    }


}
}
...