Giriş operatörü (+, -, *, /) olduğunda iki işleneni sayan yığını kullanarak nasıl değerlendirebilirim? örneğin giriş:
+
Çıkış:
4 + 5 = 9
Girdi:
*
Çıkış:
3 * 9 = 27
Girdi:
/
Çıkış:
27/10 = 2.7
Girdi:
-
Çıkış: 2,7-1 = 1.7
Sorunum tamsayı olarak giriş depolamak için engel oluyor ve daha sonra bu tür bir çıktı üretmek için değerlendirilmesi.
benim Stack() koduYığın Postfix Değerlendirmesi?
public class Stack {
int maxSize;
int top;
String array[];
public Stack(int n)
{
maxSize = n;
array = new String[maxSize];
top = 0;
}
public boolean empty()
{
if(top==0)
{
return true;
}
else
{
return false;
}
}
public void push(String str)
{
if(top < maxSize)
{
array[top] = str;
top++;
}
else
{
System.out.println("Stack Overflow !!!");
}
}
public String pop()
{
if(!this.empty())
{
String temp = this.peek();
array[top-1] = null;
top--;
return temp;
}
else
{
return null;
}
}
public String peek()
{
if(top > 0)
{
return array[top-1];
}
else
{
return null;
}
}
}
benim ana kod
public static void main(String[] args) {
// Stack<Integer> stack = new Stack<Integer>(); <-- error?
Scanner sc = new Scanner(System.in);
Stack myStak = new Stack(3);
System.out.println("Input : ");
String input;
do{
input = sc.next()+sc.nextLine();
myStak.push((input));
String operator = myStak.peek();
switch(operator.charAt(0))
{
case '+':
int a = Integer.parseInt(myStak.pop());
int b = Integer.parseInt(myStak.pop());
int result = a+b;
myStak.push(Integer.toString(result));
System.out.print("Output : ");
System.out.print(a+" + "+b+" = "+result);
break;
}
// myStak.push(myStak.pop() + myStak.pop());
// System.out.println("Output:");
// System.out.println(myStak.pop()+"+"+myStak.pop());
}
while(input!= "+" || input!= "-" || input!= "*" || input!= "/");
Aklında iki noktaya dikkat etmek gerekir: Burada
7 Kodunuzun temizlemiş versiyonudur. 1) pop olduğunda artık yığın üzerinde değil, bu yüzden temp değişkeninde saklamanız gerekir. 2) İki kez pop yaparken sol taraftaki ve operatörün sağ tarafı olan aklınızda bulundurun. – ditkin
Geçici bir değişkende sakladım ama "+" gibi bir operatöre girdiğimde, bana bir hata veriyor, buna neyin neden olabileceğini biliyor musunuz? @ditkin – RikiMaru