计算器大家并不陌生,在我们使用的手机中,还是在电脑中,都提供了计算器,通过计算器可能行方便的进行数学的运算。例如,在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 主窗体中控件的属性设置
控件名称 |
控件属性 |
关联变量 |
|
text:0 focusable:false horizontalAlignment:right preferredSize:220×21 |
showText |
|
text:BackSpace(←) preferredSize:110×28 |
backspaButton |
|
text:CE preferredSize:50×28 |
ceButton |
|
text:C preferredSize:50×28 |
cButton |
|
text:7 preferredSize:52×28 |
button7 |
|
text:8 preferredSize:52×28 |
button8 |
|
text:9 preferredSize:52×28 |
button7 |
|
text:+ preferredSize:52×28 |
addButton |
|
text:4 preferredSize:52×28 |
button4 |
|
text:5 preferredSize:52×28 |
button5 |
|
text:6 preferredSize:52×28 |
button6 |
|
text:- preferredSize:52×28 |
subButton |
|
text:1 preferredSize:52×28 |
button1 |
|
text:2 preferredSize:52×28 |
button2 |
|
text:3 preferredSize:52×28 |
button3 |
|
text:* preferredSize:52×28 |
mulButton |
|
text:0 preferredSize:52×28 |
button0 |
|
text:. preferredSize:52×28 |
pointButton |
|
text:= preferredSize:52×28 |
equalButton |
|
text:/ preferredSize:52×28 |
divButton |
(5)转到代码视图,在public class MainFrame extends JFrame {语句的下方定义3个成员变量num、operator和result,关键代码如下:
public class MainFrame extends JFrame { //系统生成的代码
private String num = "0";// 操作数
private String operator = "+";// 运算符
private String result = "0";// 结果
(6)编写用于处理输入0到9之间的数字及小数点的方法setInputNumber()。在该方法中,根据输入的字符设置num操作数的值,主要应用if语句进行条件判断。setInputNumber()方法有两个参数,一个用于指定显示框的值,另一个用于指定当前按下的是哪个按钮。setInputNumber()方法的具体代码如下:
/**
* 功能:输入0到9之间的数字及小数点
*
* @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 默认的运行结果