[Java]INF to ONP


(IcyMat) #1

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


([alex]) #2

Założę się że masz skopane funkcje Push() i/lub Pop()