PDA

نسخه کامل مشاهده نسخه کامل : برنامه تبدیل عبارت منظم infix به prefix



setaieshh
13-12-2013, 16:31
سلام
یه برنامه به زبان جاوا نوشتم که ورودی رو به صورت infix میگیره و خروجی رو به صورت prefix چاپ میکنه.
اما هر کاریش میکنم error داره.
کسی میتونی راهنماییم کنه؟
این برنامه رو به دو صورت نوشتم:
1) با استفاده از کلاس Scanner
2) با استفاده از کلاس StringTokenizer
توی هردوش به مشکل برخوردم
فعلا همون روش اول رو آپلود میکنم. اگر راهنماییم کنین ممنون میشم.


import java.util.Scanner;
//import java.io.*;
//import java.util.*;
//import javax.swing.JOptionPane;

public class Converter {

public static String str1="";
public static String Arr="";
public static int loopCounter;
public static char char1=' ';
public static int i,j,e,n,t=0;
public static char prefixStack[],prefix[];
public static char stackA[];

public static int olaviat(int primt){
switch(primt)
{
case '+':
case '-':
{return 1;}
case '*':
case '/':
{return 2;}
case '&':
case '|':
{return 3;}
case '@':
case '#':
{return 4;}
case '(':
case ')':
{return 5;}
default: return 0;
}
}

public static void main (String[] args){
//get input
Scanner input = new Scanner(System.in);
System.out.println("Infix To Prefix(without space):");
str1 = input.next();

Arr=str1;

loopCounter=str1.length();
char prefixStack[]=new char [str1.length()];
char prefix[]=new char [str1.length()];
char stackA[]=new char [str1.length()];

while(loopCounter != 0)
{
char1=Arr.charAt(i);
if(char1==')')
{stackA[i]=char1;} //push

else if(char1=='1' || char1=='2' || char1=='3' || char1=='4' || char1=='5' || char1=='6' || char1=='7' || char1=='8' || char1=='9' || char1=='0' )
{prefixStack[i]=char1;}//chap dar khoroojy

else if(char1=='(')
{ e=i;
do{
prefixStack[e]=stackA[j];
j--;
e++;
}while (stackA[j]!=')');
stackA[i]=' ';//parantez baste ra var midaram
}

else if(char1=='+' || char1=='-' || char1=='*' || char1=='/' || char1=='&' || char1=='|' || char1=='@' || char1=='#' )
{
do{
prefixStack[i]=stackA[n];
i++;
}while(olaviat(stackA[n])>= olaviat(char1));
stackA[i]=char1; //push
}
i++;
}

//now: chap prefixStack[i] be soorate reverse
t=str1.length();
for(int y=0;y!=str1.length(); y++)
{
prefix[y] =prefixStack[t];
t--;
}




}
}