我已經編寫了一個將中綴表達式轉換爲後綴表達式的程序。不過,我需要多輸入和停止時,我發現一個0一次在java中的多個輸入
我所是,
輸入:(3 + 4)*(3-1)
輸出:4 + 3 1 - *
我需要的是,
輸入:
(3 + 4)*(3-1)
(3 * 4) - (3 * 1)
(3 + 4)*(3-1)
(3 + 2)*((3-3)
(3+ 4)*(3-1)
輸出:
4 + 3 1 - *
4 * 3 1 * -
4 + 3 1 - *
語法錯誤
4 + 3 1 - *
末
的代碼是:
public static void main(String args[])throws IOException
{
BufferedReader input = new BufferedReader (new InputStreamReader(System.in));
String s = input.readLine();
String pf = new String();
int i=0, check=0;
Stack<Character> s1 = new Stack<>();
while(i<s.length())
{
if(isOperand(s.charAt(i)))
{
pf += s.charAt(i);
}
else if(isOperator(s.charAt(i)))
{
while (!s1.empty() && s1.peek() != '(' && compareOperators(s1.peek(),s.charAt(i)) <= 0)
{
pf += ' ';
pf += s1.peek();
s1.pop();
}
pf += ' ';
s1.push(s.charAt(i));
}
else if (s.charAt(i) == '(')
{
s1.push(s.charAt(i));
}
else if (s.charAt(i) == ')')
{
check++;
while (!s1.empty())
{
if ((char)s1.peek() == '(')
{
check--;
s1.pop();
break;
}
pf += ' ';
pf += s1.peek();
s1.pop();
}
}
i++;
}
while (!s1.empty()) {
if(s1.peek()=='(')
check--;
pf += ' ';
pf += s1.peek();
pf += ' ';
s1.pop();
}
if(check!=0)
System.out.println("Syntax Error");
else
{
System.out.println(pf);
}
}
誰能幫助我?
我想你應該從轉換邏輯分離第一輸入邏輯。將算法提取到一個方法中,該方法將表達式字符串作爲參數並將轉換後的表達式作爲字符串返回。那麼你可能會看到自己的解決方案! – isnot2bad
你需要多次調用'input.readLine()'。 –
我不同意你的期望;你應該期望'(3 + 4)*(3-1)'產生'34 + 31- *'。你錯過了那個額外的'3'。 – Makoto