ورود

View Full Version : مشکل برنامه ی تبدیل



ghazal_mohammady
دوشنبه 04 آذر 1392, 14:12 عصر
عرض سلام و خسته نباشید
این قطعه کد تبدیل infix به postfix را باید انجام بده، اما نمیدونم اشکال کارم کجاست، میشه خواهش کنم راهنماییم کنید؟

Scanner sc=new Scanner(System.in);
System.out.println("Plz enter a Postfix Math expression:");
Stack s=new Stack();
String op = "";
String input=sc.nextLine();
String []c=input.split("");
for(int i=0;i<c.length;i++)
{
if(c[i]==("("))
{
s.push(c[i]);
}
else if(c[i].matches("[\\d]"))
{
op+=c[i];
}
else if(operator(c[i]))
{ if(comp(c[i])>comp(s.pop()))
s.push(c[i]);
else
op+=s.pop();
}
else if(c[i]==")")
{
while(s.pop()!="(" && !s.isEmpety()){
op+=s.pop();
}
s.pop();
}
}
System.out.print(op);
}
public static int comp (String operator) {
if (operator=="^")
return 3;
if (operator == "/" || operator == "*")
return 2;
if (operator == "+" || operator == "-")
return 1;
return 0;
}
static boolean operator(String cs)
{
if(cs=="/"||cs=="*"||cs=="+"||cs=="-")
return true;
else
return false;
}

ghazal_mohammady
سه شنبه 05 آذر 1392, 21:51 عصر
خواهش می کنم یعنی هیچکی نیست یه راهنمایی بکنه :ناراحت::ناراحت::ناراحت:

ghazal_mohammady
جمعه 08 آذر 1392, 21:41 عصر
واقعا تعجب میکنم! مگه این سایت برای این راه اندازی نشده که نو پاهای برنامه نویسی بتونن از تجربیات بزرگوارانی چون اساتدی و برنامه نویسان حرفه ای استفاده کنن، چرا عکس العملی در رابطه با بسیاری از پست ها نیست!

arefane
جمعه 15 آذر 1392, 20:56 عصر
دوست عزیز

برنامه ای که شما نوشتید سرشار از اشکالات دستوری و منطقی هست . اگر کسی بخواد برنامه ی شما رو درست کنه باید کلی وقت صرف اشکال زدایی و رفع ایرادات منطقی برنامه بکنه . پس سایر دوستان وظیفه ندارن که وقت بزارن و برنامه ی شما رو اشکال زدایی کنن. اگر کسی این کار رو کرد، به شما لطف کرده . ولی نباید از کسی توقع پاسخگویی داشته باشید.

برنامه تون رو دیدم . چندتا اشکال اساسی داره :
اول اینکه برای مقایسه ی دو رشته، از == استفاده کردید، در صورتی که اینکار اشتباهه و باید از تابع equals() استفاده کنید .

if (c[i].equals("("))

دومین اشکالش اینه که از تابع pop پشته، درجای نادرستی استفاده کردید. در واقع تابع pop عنصر بالای پشته رو بعد از برگردوندن، حذف میکنه . ولی شما نباید در مقایسه ها ، عنصر بالای پشته رو حذف کنید . باید از تابع peek به جای pop استفاده کنید که عنصر بالای پشته رو بدون حذف کردن، برای شما بر میگردونه . یعنی باید از

while (!s.peek().equals("("))
به جای

while(s.pop()!="(" )
استفاده کنید.
در ضمن اشکالات جزیی دیگه ای هم وجود داره که میتونید با دیباگ کردن برنامه، متوجه اونها بشید.
موفق باشید.