我正在使用反向波蘭表示法計算器。我創建了一個方法來處理計算,但是在我的代碼中有三行導致錯誤。在每個=
之後執行操作然後顯示。我試圖從TxtInputBox
中獲取字符串並將其轉換爲整數,但總是顯示捕獲消息Please check the input
。然後沒有得到計算或顯示。我相信我的第一個if語句將檢查實際整數並避免字符。我的最終目標是以rpn格式輸入公式,並將結果顯示在多行文本框中。反向波蘭表示法 - 結果的邏輯和顯示
採樣輸入5 6 -=
代碼
namespace rpncalc
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void RPNCalc(TextBox TxtBoxInputbox, TextBox TxtBoxOutputbox)
{
Stack<int> stackone = new Stack<int>();
stackone.Clear();
string[] inputarray = TxtBoxInputbox.Text.Split();
int end = inputarray.Length - 1;
int numinput;
int i = 0;
do
{
if(inputarray[i] != "=" && inputarray[i] != "+" && inputarray[i] != "-" && inputarray[i] != "*" && inputarray[i] != "/")
{
try
{
numinput = Convert.ToInt32(inputarray[i]);
stackone.Push(numinput);
}
catch
{
MessageBox.Show("Please check the input");
}
}
else if (inputarray[i]== "+")
{
try
{
int store1 = stackone.Pop();
int store2 = stackone.Pop();
stackone.Push(store2 + store1);
}
catch
{
}
}
else if (inputarray[i]== "-")
{
try
{
int store1 = stackone.Pop();
int store2 = stackone.Pop();
stackone.Push(store2 + store1);
}
catch
{
}
}
else if (inputarray[i]== "+")
{
try
{
int store1 = stackone.Pop();
int store2 = stackone.Pop();
stackone.Push(store2 + store1);
}
catch
{
}
}
else if (inputarray[i]== "*")
{
try
{
int store1 = stackone.Pop();
int store2 = stackone.Pop();
stackone.Push(store2 + store1);
}
catch
{
}
}
else if (inputarray[i]== "/")
{
try
{
int store1 = stackone.Pop();
int store2 = stackone.Pop();
stackone.Push(store2 + store1);
}
catch
{
}
}
}
while(i < end && inputarray[i]!= "=" && stackone.Count != 0);
string txtout = TxtInputBox + " " + stackone.Pop().ToString() + Environment.NewLine;
TxtOutputBox.AppendText(txtout);
TxtInputBox.Clear();
}
private void Btn_Calc_Click(object sender, EventArgs e)
{
RPNCalc(TxtInputBox, TxtOutputBox);
}
}
}
3210
請添加樣品輸入 – Habib
第一if語句可以被縮短爲'如果( 「= + - * /」。的indexOf(inputarray [I])== -1)'這也更具有可讀性。可選:var operators = new [] {'=','+',' - ','*','/'};如果(!operators.Contains(inputarray [i]))' – jgauffin
所有其他的if語句都可以用'IOperatorExecutor'接口和'Dictionary' –
jgauffin