PDA

View Full Version : مشکل این کد



ghazal_mohammady
پنج شنبه 30 آبان 1392, 22:13 عصر
عرض سلام و ادب خدمت اساتید عزیز
در برنامه ی زیر من کلاس استک رو خودم نوشتم و خواستم postfix رو با کمک اون ارزیابی کنم ، اما نمیدونم چرا خروجی نمیده میشه خواهش کنم کمکم کنید، خیلی مهمه

ghazal_mohammady
جمعه 01 آذر 1392, 19:32 عصر
عرض سلام و ادب مجدد
یعنی انقدر این کد بد نوشته شده که ارزش یه راهنمایی هم نداره؟:ناراحت::ناراحت:

M0TR!X
جمعه 01 آذر 1392, 20:07 عصر
دقیقا بگو چه اروری میده

ghazal_mohammady
جمعه 01 آذر 1392, 21:15 عصر
Plz enter a Postfix Math expression:
2 3 +
2 3 +Stack overflow
2Stack overflow
3Stack overflow
Stack overflowException in thread "main" java.lang.NumberFormatException: For input string: "
"
at java.lang.NumberFormatException.forInputString(Unk nown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at Postfix.main(Postfix.java:32)

ghazal_mohammady
جمعه 01 آذر 1392, 21:18 عصر
اینم استکم

mihanblog
جمعه 01 آذر 1392, 21:42 عصر
http://stackoverflow.com/questions/11190264/postfix-stack-calculator-java
مراجعه کنید ببینید چجوری نوشته شاید کمکتون کنه

Ehsan rashydy
جمعه 01 آذر 1392, 22:32 عصر
عرض سلام و ادب مجدد
یعنی انقدر این کد بد نوشته شده که ارزش یه راهنمایی هم نداره؟:ناراحت::ناراحت:

خط 45 و 46 رو بزاری بعد از حلقه ی for فک کنم درست بشه!

arefane
جمعه 01 آذر 1392, 23:50 عصر
با سلام به شما دوست عزیز

همونطور که دوستمون اشاره کردن، مشکل برنامه ی شما اینه که با هر بار چرخش حلقه for ، محتوای stack رو pop میکنید و برنامه error میده. در صورتی که این کار باید بعد از به پایان رسیدن حلقه انجام بشه ، یعنی خط های 45 و 46 باید به بعد از حلقه ی for منتقل بشن .

در ضمن دوتا اشکال کوچیک دیگه هم در این برنامه وجود داشت :

1) خط 19 باید با خط 31 جابجا بشه ؛ چون عمگرها رو اشتباه نوشتید. (ضرب به جای جمع و جمع به جای ضرب)

2) در حل عبارت postfix به روش پشته، عبارت باید از سمت راست پیمایش بشه و داخل پشته قرار بگیره. پس اگه داشته باشیم / a b ، اول a در پشته قرار میگیره و بعد b و بنابراین اول b از پشته خارج میشه و بعد a. در این صورت اگر شما اولین عملوند رو بر دومی تقسیم کنید، b بر a تقسیم میشه در صورتی که در عبارت اصلی بر عکس این بوده . پس شما در خط های 28 و 40 ، باید بنویسید :
r = y / x و همینطور r = y - x

موفق باشید

ghazal_mohammady
شنبه 02 آذر 1392, 08:48 صبح
سپاس گزارم !

ghazal_mohammady
یک شنبه 03 آذر 1392, 22:00 عصر
عرض سلام و ادب مجدد آیا مشکل این کد هم آکولاده ؟


import java.util.*;
public class Postfix {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("Plz enter a Postfix Math expression:");
Stack s=new Stack();
Stack s2=new Stack();
String op = "";
String input=sc.nextLine();
String []c=input.split("");
for(int i = 0; i < c.length; i++)
{
if (c[i]!= "+" || c[i]!= "*" || c[i]!= "/"|| c[i]!= "+" || c[i]!= "(" || c[i]!= ")")
{
s.push(c[i]);
}
else if(c[i]=="*" || c[i]=="+"|| c[i]=="/")
{
if(c[i]!=")")
{
s2.push(c[i]);
}
else
{
op=s2.pop();
s.push(op);
}
}
}
op=s2.pop();
System.out.print(op);
}
}

mojtab23
پنج شنبه 21 آذر 1392, 17:48 عصر
سلام
من کار با stack را بلد نیستم ولی می دانم که اگر می خواهید کسی جواب بدهد، حداقل باید بداند کد شما چهکار می کند و بهتر است چند تا توضیح توی کدتان بگذارید و نام گذاری هاتون را با معنی تر کنید.