编写简易计算器

计算器大家并不陌生,在我们使用的手机中,还是在电脑中,都提供了计算器,通过计算器可能行方便的进行数学的运算。例如,在windows 2003系统中提供的计算器如图1和图2所示,通过图2所示的计算器,不仅可以进行数学运算,而且还能进行进制转换,以及数据求和、求平均值等统计运算。

1  windows 2003自带的计算器(标准型)

2  windows 2003自带的计算器(科学型)

下面我们也来制作一个计算器。它可以实现数字的加、减、乘和除的混合运算。例如,首先单击“4”和“5”按钮,然后单击“*”按钮,再单击“2”按钮,最后单击“=”按钮,将显示45*2的运算结果90.0,如图3所示。

3  运行结果

说明:在该计算器中,单击“CE”按钮,可以删除当前操作数;单击“C”按钮,可以将全部运算归零;单击“BackSpace()”按钮,可以删除一个数字。

 关键技术

在实现计算器时,应用的主要技术有if语句、Float类的valueOf()方法以及String类的indexOf()方法、equals()方法和substring()方法。由于if语句在从零开始版块中已经介绍,所以这里不进行介绍。下面重点介绍一下Float类的valueOf()方法以及String类的indexOf()方法、equals()方法和substring()方法。

l         Float类的valueOf()方法

Float类的valueOf()方法用于返回参数字符串所表示的float型值的Float对象,其方法原型如下:

public static Float valueOf(String s)

                     throws NumberFormatException

其中,参数s表示要转换为float型的字符串。

例如,将字符串“520.7”转换为float型可以使用下面的代码:

Float.valueOf("520.7");

l         String类的equals()方法

String类的equals()方法用于判断两个字符串是否具有相同的字符和长度,其方法原型如下:

public boolean equals(Object anObject)

其中,参数anObject用于指定与此String进行比较的对象。

例如,比较字符串变量value的值是否等于小数点,可以使用下面的代码:

value.equals(".");

l         String类的indexOf()方法

String类的indexOf()方法用于返回指定子字符串在此字符串中第一次出现处的索引,通过该方法可以判断一个字符串中是事包括指定字符,其方法原型如下:

public int indexOf(String str)

其中,参数str用于指定要查找的字符串。

例如,判断指定字符串中是否包括“.”字符,可以使用下面的代码:

showTextValue.indexOf(".")

说明:使用该方法,如果找不到对应的字符串,将返回-1

l         String类的substring()方法

String类的substring()方法可以获取从字符串某一索引位置开始截取,至某一索引位置结束的子串,其方法原型如下:

public String substring(int beginIndex,

                        int endIndex)

其中,参数beginIndex用于指定开始位置的索引,参数endIndex用于指定结束位置的索引。

例如,获取字符串变量showTextValue从索引0到索引5的子串,即从第1个字符到5个字符的子串,代码如下:

String showTextValue="abcdefg";

showTextValue.substring(0,5);          //返回值为abcde

 实现步骤

下面我们来介绍猜数字游戏的实现步骤。

1)创建一个Java项目,名称为“编写简易计算器”。

2)创建一个JFrame窗体,名称为MainFrame,并将其保存在com.wgh包中。

3)转到设计视图,在属性面板中,将layout属性设置为FlowLayout,即采用流布局。

4)次向窗体中添加1个文本框和19个按钮控件,并设置主要属性,如表1所示。

1                   主窗体中控件的属性设置

控件名称

控件属性

关联变量

text0

focusablefalse

horizontalAlignmentright

preferredSize220×21

showText

textBackSpace()

preferredSize110×28

backspaButton

textCE

preferredSize50×28

ceButton

textC

preferredSize50×28

cButton

text7

preferredSize52×28

button7

text8

preferredSize52×28

button8

text9

preferredSize52×28

button7

text+

preferredSize52×28

addButton

text4

preferredSize52×28

button4

text5

preferredSize52×28

button5

text6

preferredSize52×28

button6

text-

preferredSize52×28

subButton

text1

preferredSize52×28

button1

text2

preferredSize52×28

button2

text3

preferredSize52×28

button3

text*

preferredSize52×28

mulButton

text0

preferredSize52×28

button0

text.

preferredSize52×28

pointButton

text=

preferredSize52×28

equalButton

text/

preferredSize52×28

divButton

5)转到代码视图,在public class MainFrame extends JFrame {语句的下方定义3个成员变量numoperatorresult,关键代码如下:

public class MainFrame extends JFrame {  //系统生成的代码

      private String num = "0";// 操作数

      private String operator = "+";// 运算符

      private String result = "0";// 结果

6)编写用于处理输入09之间的数字及小数点的方法setInputNumber()。在该方法中,根据输入的字符设置num操作数的值,主要应用if语句进行条件判断。setInputNumber()方法有两个参数,一个用于指定显示框的值,另一个用于指定当前按下的是哪个按钮。setInputNumber()方法的具体代码如下:

/**

 * 功能:输入09之间的数字及小数点

 *

 * @param showTextValue

 * @param value

 * @return

 */

public void setInputNumber(String showTextValue, String value) {

      if (value.equals(".")) { // 判断输入值是否为小数点

            if (showTextValue.indexOf(".") < 0) { // 判断是否已经输入过小数点

                  num = showTextValue + value; // num的值为显示框原有的值与输入的数字连接后的字符串

            } else {

                  num = showTextValue; // num的值为显示框的内容

            }

      } else { // 否则表示输入的数字

            if (showTextValue.equals("0")) { // 判断显示框中的数字是否为0

                  num = value; // num的值为输入的数字

            } else {

                  num = showTextValue + value; // num的值为显示框原有的值与输入的数字连接后的字符串

            }

      }

}

7)在图4所示的各按钮上双击鼠标左键,进入到代码视图,在该按钮的单击事件中,编写代码调用setInputNumber()方法处理输入的数字及小数点。例如,在按钮7的单击事件中添加以下代码,其他的按钮依此类推。

setInputNumber(num, "7");   // 输入7

showText.setText(num);       //设置输入框显示的内容

4  数字及小数点按钮

8)编写实现运算功能的方法count()。在该方法中,首先将String型的操作数和结果转换为float型,然后将根据操作符operator的值进行相应的加、减、乘、除运算。count()方法的具体代码如下:

/**

 * 实现运算

 */

private void count() {// 计算结果

      float n = Float.valueOf(num); // 将操作数字符串转换为float

      float r = Float.valueOf(result); // 将结果字符串转换为float

      if (r == 0) {

            result = num;

            num = "0";

      } else {

            if (operator.equals("+")) { // 加法运算

                  r = r + n;

            } else if (operator.equals("-")) { // 减法运算

                  r = r - n;

            } else if (operator.equals("*")) { // 乘法运算

                  r = r * n;

            } else { // 除法运算

                  r = r / n;

            }

            num = "0"; // 设置num的值为字符串0

            result = r + "";

      }

}

9)在“+”、“-”、“*”、“/”、“=”按钮上双击鼠标左键,进入到代码视图,在该按钮的单击事件中,编写代码调用count()方法进行算术运算,并设置显示框的内容,另外,还需要将num设置为0,将运算符设置为所单击的运算符。例如,在“+”按钮的单击事件中添加以下代码,其他的按钮依此类推。

count();// 计算结果

showText.setText(result);// 修改显示框的内容

num = "0";

operator = "+";// 设置运算符

10)编写backspace()方法实现退格功能,具体代码如下:

/**

 * 功能:实现退格键功能

 *

 * @param showTextValue

 * @return

 */

public String backspace(String showTextValue) {

      String newValue = "0"; // 保存按退格键后显示框中显示的内容

      if (!num.equals("0")) { // 判断num的值是否为0

            newValue = showTextValue.substring(0, showTextValue.length() - 1);      //设置newValue的值为当前显示框的内容去掉最右侧的一个数字

            if (newValue.equals("")) { // 如果显示框的内容为空

                  newValue = "0"; // 显示框中显示的内容为"0"

            }

            num = newValue; // num的值为显示框的内容

      } else { // 否则表示num的值为0

            newValue = result; // 显示框的内容为结果

      }

      return newValue; // 返回显示框的内容

}

11)在“BackSpace()”按钮上双击鼠标左键,进入到代码视图,在该按钮的单击事件中,调用backspace()方法实现退格键功能,具体代码如下:

showText.setText(backspace(showText.getText())); // 实现退格键功能

12)在“CE”按钮上,双击鼠标左键,进入到代码视图,在该按钮的单击事件中,将显示框的内容设置为0,并将操作数归0,具体代码如下:

showText.setText("0");   //设置显示框的内容为0

num = "0"; // 操作数归0

13)在“C”按钮上,在该按钮的单击事件中,将操作数和结果归0,并将显示框的内容设置为0,另外还需要将运算符设置为默认值,具体代码如下:

num = "0"; // 操作数归0

showText.setText("0");// 设置显示框的内容为0

result = "0"; // 结果归0

operator = "+";// 运算符设为默认

14)保存该文件,单击按钮,运行该程序,将显示如图5所示的运行结果。

5  默认的运行结果