1、完成一个计算器程序,显示并实现如下功能菜单:
+---------------+
| 欢迎使用 |
| 1 求和 |
| 2 求差 |
| .... |
| n 求幂 |
| n+1 求阶乘 |
| n+2 退出 |
+---------------+
2、代码书写规范,语句注释丰富;
写出对流程和逻辑的分析或写出自己的设计思路
该回答引用chatgpt:
设计思路:
创建一个Calculator类作为程序的主类,用于显示菜单、接收用户输入和执行相应的计算操作。
定义一个Operation接口,包含一个calculate()方法,用于执行具体的计算操作。
创建不同的操作类,实现Operation接口,并重写calculate()方法,分别实现求和、求差、求幂、求阶乘等计算功能。
在Calculator类中,根据用户输入的菜单选项,选择相应的操作类进行计算。
package com.test;
import java.util.Scanner;
// 计算器接口
interface Operation {
double calculate(double num1, double num2);
}
// 求和操作
class SumOperation implements Operation {
@Override
public double calculate(double num1, double num2) {
return num1 + num2;
}
}
// 求差操作
class DifferenceOperation implements Operation {
@Override
public double calculate(double num1, double num2) {
return num1 - num2;
}
}
// 求幂操作
class PowerOperation implements Operation {
@Override
public double calculate(double num1, double num2) {
return Math.pow(num1, num2);
}
}
// 求阶乘操作
class FactorialOperation implements Operation {
@Override
public double calculate(double num1, double num2) {
double result = 1;
for (int i = 1; i <= num1; i++) {
result *= i;
}
return result;
}
}
// 计算器类
class Calculator {
private Operation[] operations;
private Scanner scanner;
public Calculator() {
operations = new Operation[]{
new SumOperation(),
new DifferenceOperation(),
new PowerOperation(),
new FactorialOperation()
};
scanner = new Scanner(System.in);
}
// 显示菜单选项
private void displayMenu() {
System.out.println("+---------------+");
System.out.println("| 欢迎使用 |");
System.out.println("| 1. 求和 |");
System.out.println("| 2. 求差 |");
System.out.println("| 3. 求幂 |");
System.out.println("| 4. 求阶乘 |");
System.out.println("| n+1 退出 |");
System.out.println("+---------------+");
}
// 执行计算操作
private void performOperation(int choice) {
if (choice < 1 || choice > operations.length) {
System.out.println("无效的选择!");
return;
}
System.out.print("请输入第一个数字:");
double num1 = scanner.nextDouble();
double num2=0;
if(choice!=4) {
System.out.print("请输入第二个数字:");
num2 = scanner.nextDouble();
}
double result = operations[choice - 1].calculate(num1, num2);
System.out.println("计算结果:" + result);
}
// 运行计算器程序
public void run() {
boolean isExit = false;
while (!isExit) {
displayMenu();
System.out.print("请选择菜单选项(输入对应的数字):");
int choice = scanner.nextInt();
switch (choice) {
case 1:
case 2:
case 3:
case 4:
performOperation(choice);
break;
case 5:
System.out.println("感谢使用,再见!");
isExit = true;
break;
default:
System.out.println("无效的选择!");
}
System.out.println(); // 输出空行,用于分隔每次操作
}
scanner.close();
}
}
// 主程序入口
public class Main {
public static void main(String[] args) {
Calculator calculator = new Calculator();
calculator.run();
}
}
我的回答:
Java编写一个计算器程序的流程和逻辑如下:
1.通过Java GUI实现界面的搭建。
2.编写监听器类,实现计算器的计算逻辑。监听器类需要继承ActionListener接口,然后重写actionPerformed方法。
3.为每个按钮添加监听器,响应用户在界面上的操作,并将计算结果返回给用户。
4.实现求和、求差、求幂和求阶乘等运算,还需要实现一个退出程序的功能。
5.编写规范且注释丰富的代码。
一个Java计算器程序的示例代码如下:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Calculator extends JFrame implements ActionListener{
private JTextField num1,num2,result;
private JButton addButton, subButton, mulButton, divButton, powerButton, factorialButton, clearButton, exitButton;
public Calculator(){
init();
setTitle("Calculator");
setLocationRelativeTo(null);
setSize(360,230);
setVisible(true);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void init(){
JPanel numPanel = new JPanel();
numPanel.setLayout(new GridLayout(3,2));
num1 = new JTextField(10);
num2 = new JTextField(10);
result = new JTextField(10);
result.setEditable(false);
numPanel.add(new JLabel("Enter the First Number:"));
numPanel.add(num1);
numPanel.add(new JLabel("Enter the Second Number:"));
numPanel.add(num2);
numPanel.add(new JLabel("Result:"));
numPanel.add(result);
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(4,4));
addButton = new JButton("+");
subButton = new JButton("-");
mulButton = new JButton("*");
divButton = new JButton("/");
powerButton = new JButton("^");
factorialButton = new JButton("!");
clearButton = new JButton("Clear");
exitButton = new JButton("Exit");
addButton.addActionListener(this);
subButton.addActionListener(this);
mulButton.addActionListener(this);
divButton.addActionListener(this);
powerButton.addActionListener(this);
factorialButton.addActionListener(this);
clearButton.addActionListener(this);
exitButton.addActionListener(this);
buttonPanel.add(addButton);
buttonPanel.add(subButton);
buttonPanel.add(mulButton);
buttonPanel.add(divButton);
buttonPanel.add(powerButton);
buttonPanel.add(factorialButton);
buttonPanel.add(clearButton);
buttonPanel.add(exitButton);
Container content = getContentPane();
content.setLayout(new BorderLayout());
content.add(numPanel,BorderLayout.NORTH);
content.add(buttonPanel,BorderLayout.CENTER);
}
public void actionPerformed(ActionEvent event){
String operation = event.getActionCommand();
if(operation.equals("+")){
double value1 = Double.parseDouble(num1.getText());
double value2 = Double.parseDouble(num2.getText());
result.setText(Double.toString(value1+value2));
}else if(operation.equals("-")){
double value1 = Double.parseDouble(num1.getText());
double value2 = Double.parseDouble(num2.getText());
result.setText(Double.toString(value1-value2));
}else if(operation.equals("*")){
double value1 = Double.parseDouble(num1.getText());
double value2 = Double.parseDouble(num2.getText());
result.setText(Double.toString(value1*value2));
}else if(operation.equals("/")){
double value1 = Double.parseDouble(num1.getText());
double value2 = Double.parseDouble(num2.getText());
result.setText(Double.toString(value1/value2));
}else if(operation.equals("^")){
double value1 = Double.parseDouble(num1.getText());
double value2 = Double.parseDouble(num2.getText());
result.setText(Double.toString(Math.pow(value1, value2)));
}else if(operation.equals("!")){
long value = Long.parseLong(num1.getText());
long factorial = 1;
for(long i=1;i<=value;i++){
factorial=factorial*i;
}
result.setText(Long.toString(factorial));
}else if(operation.equals("Clear")){
num1.setText("");
num2.setText("");
result.setText("");
}else if(operation.equals("Exit")){
System.exit(0);
}
}
public static void main(String[] args){
new Calculator();
}
}
这个计算器程序分为两个部分,一个是界面部分,另一个是计算逻辑部分。界面部分使用了JFrame、JPanel、JButton、JTextField等Swing组件,计算逻辑部分则实现了ActionListener接口,处理用户的操作并将结果返回给用户。该程序实现了加减乘除取幂和阶乘等运算,并提供了清空操作和退出程序的功能。