嘿傢伙們所以繼承人我的問題。我有一個操作一堆Fractions的類,它是一個RPN評估器。我更新Java,只知道基本的數據結構。這是一個班級的項目,但我很沮喪。我需要打印出我用過的表達式,或者打印出表達式,直到RPN表達式無效,用valid = false/true
表示我有一個具體的方法,我必須將它打印出來並給出一個例子,但我無法弄清楚該怎麼做它...我有一個隊列可供我使用,但我必須同時使用堆棧和隊列。我意識到代碼是yuck但它是因爲我還沒有開始清理那個類。下面是輸出我需要的,如果輸入是如下的例子....注意:輸入是在報價減去引號打印一個由Stack JAVA處理的表達式
輸入* * ** * ** * * * * ** * ** * ** * ** * ** * ** * ** * *** *輸出
- 「(2/5)(1/2)* *#」 * ** * ** * ** * *式3爲:( 2/5)(1/2)**
- 「(3/1)T 1(3/2)#」 * ** * ** * ** * * Expressi在4是:(3/1)T
這是我的課(我知道它是馬虎......而規則是非常限制我可以和不能使用。無鏈表等...)
import java.util.Scanner;
public class RpnEvaluator
{
private final int MAX_TOKEN = 20;
private Scanner stdin;
private int count = 0;
public void run() throws java.io.IOException
{
runOnce();
}
public boolean isOperator(String input)
{
String[] oprtr = {"+", "-", "*"};
for(String choice: oprtr)
if(choice.equals(input))
return true;
return false;
}
public boolean isOperation(String input)
{
if(input.startsWith("(", 0))
return true;
return false;
}
public Fraction runOperation(String choice, Fraction op2, Fraction op1)
{
Fraction newFract = new Fraction();
if(choice.equals("*"))
newFract = new Fraction(op1.times(op2));
else if(choice.equals("+"))
newFract = new Fraction(op1.plus(op2));
else if(choice.equals("-"))
newFract = new Fraction(op1.minus(op2));
return newFract;
}
public void runOnce()
{
String readIn = "";
boolean valid = true;
Fraction op1 = null, op2 = null, answer = null, myFract;
Queue myQueue = new Queue(MAX_TOKEN);
Stack myStack= new Stack(MAX_TOKEN);
stdin = new Scanner(System.in);
while(stdin.hasNext() && valid == true)
{
readIn = stdin.next();
if(readIn.equals("#"))
{
break;
}
else if(!isOperator(readIn) && isOperation(readIn))
{
myFract = new Fraction(readIn);
myStack.push(myFract);
}
else if(isOperator(readIn))
{
if(myStack.isEmpty())
valid = false;
else
op2 = (Fraction)myStack.pop();
if(myStack.isEmpty())
valid = false;
else
op1 = (Fraction)myStack.pop();
myStack.push(runOperation(readIn, op2, op1));
}
else
valid = false;
}
if(myStack.isEmpty())
valid = false;
else
answer = (Fraction)myStack.pop();
if(!myStack.isEmpty())
valid = false;
if(valid == false)
{
System.out.print("Expression " + ++count + ": ");
System.out.println("Invalid Expression");
}
else
{
System.out.println("Expression " + ++count + ": ");
System.out.println("The value is: " + answer.toString());
}
clear(myStack, myQueue);
}
public void clear(Stack myStack, Queue myQueue)
{
myStack.clear();
myQueue.clear();
}
}
isOperation檢查左括號。並且這個算法沒有被提及一次... – user3381498