發表于2008年08月02日 00:21
如果計算器程序是一個命令行程序,那么完全可以要求用戶先輸入第一個操作樓,后輸入一個運算符,在輸入第二個操作數,隨后程序就可以給出結果了。
然而對于一個Windows應用程序,用戶是一個鍵一個鍵地輸入數據,程序在接到一個鍵輸入以后,根據這個鍵是什么來決定自己的下一動作。這樣,程序的行為就可以用一個“狀態機”來表達。
狀態機是計算機中常用到的分析工具,它可以表達成一個程序在運行時,如何根據輸入來在不同的狀態之間轉換。
狀態轉換
操作數一初始為0,如果開始輸入的第一個操作數的第一個鍵是操作符,之后就會接受第二個操作數。
接受第一個操作數子狀態
接受第二個操作數子狀態
在程序實現中,使用一個boolean變量 bNumBegins來判斷是否處在接受第一個數字的狀態。
If(bNumBegins)
{
iCurrent = I;
bNumBegins = false;
}
Else
{
//要求檢查運算溢出的情況
Checkd{
iCurrent = (iCurrent * 10 ) +I;
}
}
而判斷在接受第一個還是第二個操作數狀態的方法,則是看前一個運算符 -----如果前一個運算符是 = ,則現在接受的是第一個操作數,否則是第二個操作數。
計算的方法:
Switch(jOperator)
{
Case ‘+’ :
Checked{ iResult = iNum1 + iCurrent;}
Break;
Case ‘-’ :
Checked{ iResult = iNum1 - iCurrent;}
Break;
Case ‘*’ :
Checked{ iResult = iNum1 * iCurrent;}
Break;
Case ‘/’ :
Checked{ iResult = iNum1 / iCurrent;}
Break;
Default: // ‘=’
iResult = iCurrent;
break;
}
/////////////////////////////////////////////////////////////////////////
以上是見到本子個記下的一些看書的筆記,程序是一些片斷但盡顯了整個設計。
以下則是自己想的,自己想出的程序和人家的還是有一段距離。
1. 先判斷是數字還是操作符,再判斷所處狀態,再跟據不同的狀態有不同的操作.
Int Num1 = 0;
Int Num2 = 0;
Int ResultNum = 0;
Int CurrentNum = 0;
Boolean IsNum1 = true;
Boolean NumBegin = true;
Switch (key) //輸入字符
{
Case 數字:
If(IsNum1)
{
If(NumBegin)
{
Num1 = key;
CurrentNum = Num;
NumBegin = false;
Println(CurrentNum); //打印
}
Else
{
Num1 = Num1+10 + key;
CurrentNum = Num1;
Println(CurrentNum); //打印
}
}
Else
{
If(NumBegin)
{
Num2 = key;
CurrentNum = Num;
NumBegin = false;
Println(CurrentNum); //打印
}
Else
{
Num2 = Num1+10 + key;
CurrentNum = Num2;
Println(CurrentNum); //打印
}
}
Case (運算符)
+:
If(IsNum1)
{
IsNum1 = false; //變狀態
Println(CurrentNum); //打印
}
Else
{
ResultNum = Num1 + Num 2;
CurrentNum = ResultNum;
IsNum1 = false; //變狀態
Println(CurrentNum); //打印
}
- , * , / , ……
= “
If(IsNum1)
{
IsNum1 = false; //變狀態
Println(CurrentNum); //打印
//這里不太清楚具體要怎么樣,就自己定這樣
}
Else
{
ResultNum = Num1 + Num 2;
CurrentNum = ResultNum;
IsNum1 = false; //變狀態
Println(CurrentNum); //打印
}
}
2. 先判斷狀態,再判斷輸入是數字還是操作符
代碼應該同上面差不多;
3. 設定具體狀態的值,之后在一個方法中跟據不同的參數值做不同的事
如:接受第一操作數__接受第一個數字 = 1
接受第一操作數__接受其余的數字 = 2
接受第二操作數__接受第一個數字 = 3
接受第二操作數__接受第二個數字 = 4
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/ap0406708/archive/2009/03/19/4004322.aspx