Witam.
Mam problem z zadaniem z programowania w Javie, a mianowicie z konwersją z postaci infiksowej do ONP. W dwóch przypadkach program zwraca mi zły wynik. Operatory mają następujące priorytety (malejąco):
potęgowanie: ^
minus unarny: ~
operator multiplikatywny: *, / , %
operator addytywny: +, -
I dwa testy, które zwracają złe wyniki:
a^~b/c-d
a^~(b-c-d)/e-f
TERAZ JEST
a^b~c/d-
a^bc-d-~e/f-
MA BYC
ab~^c/d-
abc-d-~^e/f-
Poniżej kod mojego programu. Proszę o jakiekolwiek wskazówki bo już nie mam pomysłu jak to zrobić. Funkcje PopS(), PushS() i displayS() słuzą do obsługi stosu.
public class Source {
public static Scanner inScan = new Scanner(System.in);
public static void main(String args[]){
int ile;
ile = inScan.nextInt();
int mojawyjatkowazmienna = 0;
Source FinalStos = new Source(20000);
while(mojawyjatkowazmienna < ile) {
String Ciag;
Ciag = inScan.next();
if(Ciag.charAt(1) == 'I') {
System.out.print("");
for(int x = 5; x
if(Ciag.charAt(x) == '(') {
FinalStos.PushS( Character.toString( Ciag.charAt(x) ) );
} else if(Ciag.charAt(x) == ')') {
String tmp = FinalStos.PopS();
while(tmp.equals("(") == false) {
System.out.print(tmp);
tmp = FinalStos.PopS();
if(tmp.equals("0") == true) break;
}
} else if(operatory(Ciag.charAt(x)) != 0) {
int priority = operatory(Ciag.charAt(x));
String tmp = FinalStos.PopS();
while(operatoryS( tmp ) >= priority) {
System.out.print(tmp);
tmp = FinalStos.PopS();
if(tmp.equals("0") == true) break;
}
FinalStos.PushS( tmp );
FinalStos.PushS( Character.toString( Ciag.charAt(x) ));
} else if(operatory(Ciag.charAt(x)) == 0) {
System.out.print(Ciag.charAt(x));
}
}
FinalStos.display();
System.out.println("");
}else{
//Tutaj dalsza część odpowiedzianla za konwersję ONP -> INF
Z góry dziękuję za pomoc i pozdrawiam
IcyMat