2010-11-28 46 views
0

下面的代碼是從Calculator的實際代碼塊。它做的是用戶在計算器上按下一個數字,然後當他按下「+」時,文本字段上的數字被存儲,然後他按下一個數字,當他按下「=」時被存儲,然後在「=」條件下執行加法函數。現在我希望加法和減法都是在加法運算之後運行的,用戶想要做減法運算,那麼我該怎麼做呢? ???Java不同的計算器基本功能問題?

if(a.getActionCommand().equals("+")) 
{ 
    q=tf.getText(); 
    x=Integer.parseInt(q); 
} 

if(a.getActionCommand().equals("-")) 
{ 
    b=tf.getText(); 
    t=Integer.parseInt(b); 
} 
if(a.getActionCommand().equals("=")) 
{ 
    p=tf.getText(); 
    y=Integer.parseInt(p); 
    z=x+y; 
    //z=t-y; 
    w=Integer.toString(z); 
    tf.setText(w); 
} 
+1

正在做作業嗎? – st0le 2010-11-28 04:05:22

+1

基本上我有一段時間想到用java製作計算器,以便在考試前練習我的gui課程。 – Salar 2010-11-28 04:12:23

回答

1

怎麼樣:接受一個負數作爲輸入,然後添加?或者我錯過了這一點?

如果不是,那麼使用RPN就可以工作,根本不需要「=」。輸入兩個數字,然後「+」或「 - 」將兩個操作數從堆棧中取出,應用操作員,並將結果推回堆棧,並顯示出來。你的代碼,而不是「 - 」,使用:

第三條道路


if(a.getActionCommand().equals("-")) 
{ 
    b=tf.getText(); 
    x=-(Integer.parseInt(b)); 
} 

不知道我是否已經採取了一切考慮對最後一個建議,但它是一個開始。

1

計算器在處理諸如+-之類的操作時通常會執行=操作。試試吧,現在在計算機上打開calc應用程序並嘗試3 + 5 - 1。當您按-時,顯示屏將顯示8。您可以按照您的要求做同樣的操作,並根據需要連續處理多個+-操作。對於你發佈的代碼會有一些重構,你可以在那裏做的一件事是將你用於=操作的過程進行方法化。然後,您可以在每個+-區塊的開頭撥打performEquals

1

jcomeau_ictx提出的基於堆棧的算法是解決您的問題的一種非常可行的解決方案。

創建兩個堆棧:一個包含運算符(+, - ,*,/),另一個包含操作數(數字集合0-9)。

支持用戶按:3 + 4 - 5

Steps: 

1.) Push '3' into the operand stack 
2.) Push '+' into the operator stack 
3.) Push '4' into the operand stack. 

Since there are at least 2 operands, calculate 3 + 4 (which is 7). 

4.) Pop 3 and 4. Add these two and pop them to the operand stack 
5.) Pop + from the operator stack and push -. 
6.) Push 5 onto the stack. Subtract these two and place result in operand stack. 

通用算法:

Push operand (or operator) into the stack 
if (operands > 2 && operator > 0) 
    pop both operands and one operator; 
    calculate result; 
    place result in operand stack; 
    reset operator stack; 
0

我假設你有4個操作(+, - ,×,÷),以及你正在實現一個基本的桌面計算器,不執行操作順序。在這種情況下,jcomeau_ictx'sx=-(Integer.parseInt(b))將不起作用,因爲它只能處理減法,而不是乘法和除法,並且這些基於堆棧的解決方案是過度的。

你是3變量:firstNumber,operationsecondNumberoperation開始爲空(或使用某個指示「空」的值)。當用戶點擊=時,您需要做的是從顯示屏中取出數字並將其放入secondNumber。然後查看所有3個變量並執行operation變量中的指示。

當用戶點擊+, - ,×或÷時,首先執行=操作(將用戶輸入放入secondNumber並執行operation變量指示的操作)。將結果放入firstNumber(如果您願意,可將其顯示在屏幕上)。然後將用戶點擊(+, - ,×或÷)的操作存儲在operation變量中,以便您可以執行該操作下一次用戶點擊+, - ,×,÷或=。