如何在Java中使用函数实现简单计算器功能?
在 Java 中使用函数实现一个简单计算器功能可以分为以下步骤:
1. 定义函数并声明变量
在开始编写计算器类之前,我们需要定义实现该功能所需的功能和变量。在这里,我们需要考虑以下因素:
- 需要对哪些数字进行操作(操作数)?
- 操作类型是什么(加、减、乘、除)?
- 开始操作之前需要进行哪些检查?
因此,我们需要声明一个存储操作数的数组、一个变量存储操作类型、一个变量存储结果,以及输入输出流:
import java.util.Scanner;
public class Calculator {
private double[] operands = new double[2];
private String operation;
private double result;
private Scanner input = new Scanner(System.in);
private String[] validOps = new String[] {"+", "-", "*", "/"};
}
在上面的代码中,我们使用了一个大小为 2 的数组存储操作数,并将操作类型表示为字符串。我们还定义了结果变量和一个 Scanner 对象 input 来获取用户输入。我们还添加了一个校验器,用于确保我们的操作类型设置正确。
2. 获取数组元素以执行操作
接下来,我们需要获取操作数的值,以及用户想要执行的操作类型。我们可以通过绑定 Scanner 对象 input 与控制台输入流,使用 nextDouble() 方法来获取双精度类型的操作数。一旦获取了两个操作数,我们需要要求用户指定他们想要进行的操作。我们可以提供一个选项列表,并接受与选项相匹配的正确字符串。例如:
private void getOperandsAndOpType() {
System.out.print("Enter the first operand: ");
operands[0] = input.nextDouble();
System.out.print("Enter the second operand: ");
operands[1] = input.nextDouble();
while(true) {
System.out.print("Enter operation type (+, -, *, /): ");
operation = input.next();
// Check if the operation is valid
for(String op: validOps) {
if(op.equals(operation)) {
return;
}
}
System.out.println("Invalid operation. Please try again.");
}
}
在上面的代码中,我们首先要求用户输入两个操作数,然后使用 while 循环要求用户输入操作类型。只有当用户输入的操作类型与列表中提供的有效操作类型匹配时,循环才会终止。否则,我们会打印一条错误消息,并提示用户重新输入操作。
请注意,我们在本例中将 validOps 定义为一个字符串数组,其中包含所有有效的操作类型。我们使用 for-each 循环遍历这个列表,并检查当前输入的操作类型是否在列表中。如果是,则说明操作类型有效。
3. 定义函数以执行所需操作
当我们收集到操作数和操作类型之后,我们需要根据所选操作类型执行相应的操作。我们可以定义一个函数来完成这个任务。在本质上,这个函数应该接受两个双精度类型的操作数和一个操作类型,并返回一个双精度类型的结果。例如:
private double performOperation(double op1, double op2, String op) {
switch(op) {
case "+":
return op1 + op2;
case "-":
return op1 - op2;
case "*":
return op1 * op2;
case "/":
if(op2 == 0) {
System.out.println("Divisor cannot be zero.");
return 0;
} else {
return op1/op2;
}
// If the operation type is not valid,
// print an error message and return
default:
System.out.println("Invalid operation type.");
return 0;
}
}
在上面的代码中,我们使用 switch 语句确定操作类型,并根据所选的类型执行相应的操作。特别的, 对于除法操作,我们使用 if/else 语句来确保被除数不为零,并在发现错误时打印错误消息。如果所选操作类型不是加减乘除四种操作之一,我们输出一个错误消息并返回 0。
请注意,我们在本例中定义了输入和输出操作,而不是在函数中实现它们。这是因为我们希望我们的函数尽可能专注于根据所选的操作类型执行操作。我们应该尽可能的将负载留给主函数或注入其他功能。
4. 实施整个计算器函数
最后,我们需要将我们在前面定义的所有功能组合起来,并在主函数中实现整个计算器函数。例如:
public void run() {
getOperandsAndOpType();
result = performOperation(operands[0], operands[1], operation);
System.out.println("The result is " + result);
}
在上面的代码中,我们首先使用 getOperandsAndOpType() 函数要求用户输入所选的操作类型,并获取两个操作数。随后,我们使用 performOperation() 函数根据所选的操作类型来执行操作,最后输出计算结果。
完整的 Java 计算器程序:
import java.util.Scanner;
public class Calculator {
private double[] operands = new double[2];
private String operation;
private double result;
private Scanner input = new Scanner(System.in);
private String[] validOps = new String[] {"+", "-", "*", "/"};
public void run() {
getOperandsAndOpType();
result = performOperation(operands[0], operands[1], operation);
System.out.println("The result is " + result);
}
private void getOperandsAndOpType() {
System.out.print("Enter the first operand: ");
operands[0] = input.nextDouble();
System.out.print("Enter the second operand: ");
operands[1] = input.nextDouble();
while(true) {
System.out.print("Enter operation type (+, -, *, /): ");
operation = input.next();
// Check if the operation is valid
for(String op: validOps) {
if(op.equals(operation)) {
return;
}
}
System.out.println("Invalid operation. Please try again.");
}
}
private double performOperation(double op1, double op2, String op) {
switch(op) {
case "+":
return op1 + op2;
case "-":
return op1 - op2;
case "*":
return op1 * op2;
case "/":
if(op2 == 0) {
System.out.println("Divisor cannot be zero.");
return 0;
} else {
return op1/op2;
}
default:
System.out.println("Invalid operation type.");
return 0;
}
}
public static void main(String args[]) {
Calculator myCalc = new Calculator();
myCalc.run();
}
}
在上面的计算器代码中,我们使用了面向对象的方式,将获取操作数、执行计算和获取操作类型的操作封装在了一个特殊类中。尽管我们可以在主方法中直接完成整个计算器操作,但使用函数可以简化任务,并将代码重新排列为更易于阅读和管理的方式。
简而言之,Java 中的函数将计算器的编写过程分解为更小、更可读的部分,同时允许您最大限度地专门处理每个部分。这使得开发人员可以更快地编写更复杂的工具,并降低了缺陷的风险。
